Linux, Windows, and every BSD all run this exact flat-model GDT (base 0, limit 4GB) rather than true x86 segmentation, because paging — not segments — does the real memory protection work; the segment layer is kept alive purely because x86 mandates it. Getting the access byte wrong (0x9A vs 0x92, code vs data) is why a working kernel can suddenly triple-fault the instant it tries to execute code through a descriptor marked non-executable.