¿Por qué las direcciones de memoria virtual para los binarios de Linux comienzan en 0x8048000?

Desarmado de un binario ELF en un sistema Ubuntu x86 No pude evitar observar que la sección del código (.text) comienza desde la dirección virtual 0x8048000 y parece que no se utilizan todas las direcciones de memoria más bajas.

Esto parece ser bastante inútil y todo lo que aparece en Google es folklore que involucra STACK_TOP o protección contra las referencias de puntero nulo. El último caso parece que se puede arreglar usando una sola página en lugar de dejar un espacio de 128 MB.

Entonces mi pregunta es esta: ¿hay una respuesta definitiva a por qué el diseño se ha fijado a estos valores o es solo una elección arbitraria?

Del libro Linkers and loaders :

En los sistemas 386, la dirección de base de texto es 0x08048000, lo que permite una stack razonablemente grande debajo del texto mientras se mantiene por encima de la dirección 0x08000000, lo que permite que la mayoría de los progtwigs utilicen una única tabla de página de segundo nivel. (Recuerde que en el 386, cada tabla de segundo nivel asigna 0x00400000 direcciones).