El principal objetivo de GNU era ser software libre. Aun cuando GNU no entrañara ninguna ventaja técnica frente a Unix, sí tendría una ventaja social, al permitir que los usuarios cooperaran, y otra ética, al respetar su libertad.
Pero es natural aplicar al trabajo los criterios ya conocidos de buena práctica —por ejemplo, la asignación dinámica de estructuras de datos para evitar las limitaciones de tamaño fijadas arbitrariamente y el empleo de códigos de ocho bits, siempre que esto resultara apropiado.
Por otro lado, rechazábamos ese empeño de Unix en conservar una memoria reducida, y así decidimos no dar soporte a las máquinas de 16 bits —estaba claro que las de 32 bits serían la norma, para cuando hubiéramos terminado el sistema GNU — y no reducir la memoria a menos que superásemos un megabyte. En los programas en que no fuera crucial administrar archivos de gran tamaño, animábamos a los programadores a insertar un archivo de entrada entero en el core, luego a escanear su contenido sin preocuparse del I/O.
Estas decisiones permitieron que muchos programas GNU superasen a sus homólogos de Unix en fiabilidad y velocidad.