¿Cuáles son las principales diferencias entre BSD y GNU / Linux userland?

38

He leído mucho en Unix y Linux sobre BSD y GNU, etc. Pero todavía no entiendo cuáles son algunas diferencias reales y prácticas entre las tierras de usuario de BSD y GNU, a pesar de que a menudo se mencionan. ¿Alguien puede dar más detalles?

Al responder, explique completamente las conexiones históricas, teniendo en cuenta que no he estado vivo el tiempo suficiente como para haber experimentado un momento en que GNU / Linux no era el UNIX convencional (excepto OS X).

Strugee
fuente
2
Publiqué una lista de diferencias de GNU / Linux en OS X en el entorno de línea de comandos aquí: reddit.com/r/commandline/comments/4jydnw/… .
nisetama

Respuestas:

28

El término "tierra de usuarios" puede referirse a muchas cosas en diferentes contextos, pero aquí interpreto "tierra de usuarios de GNU" frente a "tierra de usuarios de BSD" como el conjunto mínimo predeterminado de programas que vienen con una distribución.

La gran diferencia principal es que las dos tierras de usuario comienzan con un código fuente completamente diferente. Código fuente GNU cat Código fuente NetBSD cat . Solo a partir de ese programa simple en concepto, puede ver que el gato de NetBSD usa banderas de línea de comando tradicionales de una sola letra. Los programas GNU tienden a tener banderas de una sola letra, pero también las --something-longopciones de tipo. Los programas GNU también tienden a la compatibilidad POSIX.

Esa diferencia en el código fuente le dará a los dos usuarios diferentes comportamientos en algunos casos.

También parece que NetBSD (al menos) usa su propia versión de libc, la biblioteca estándar de C. Aquí me estoy volviendo loco, pero libc y la vinculación dinámica están extrañamente interrelacionados. Nuevamente, un código fuente diferente conducirá a un comportamiento diferente.

Creo que, como usuario de shell, descubrirá que psactuaría de manera diferente y lspodría proporcionarle un resultado ligeramente diferente al que está acostumbrado. Tendría que encontrar banderas de línea de comando equivalentes para algunos programas, si usa el --long-optiontipo de banderas de línea de comando.

Históricamente, entiendo que BSD userland desciende más directamente de V6 y V7 Bell Labs Unix, a través del puerto de 32V al hardware VAX. GNU userland es más nuevo, escrito al menos en parte como reacción a los intentos de AT&T de mantener el código en secreto secreto a principios de los 80. Después de la desinversión del Sistema Bell de 1983, AT&T intentó "monetizar" Unix. Parte de eso fue licenciar el código fuente de una manera que evitó que la mayoría de las personas lo vieran. Richard Stallman y otros tuvieron problemas con esto. Su proyecto GNU existió específicamente para crear un sistema similar a Unix que se puede compartir libremente.

Mientras tanto, en 1993, AT&T demandó al sistema de la Universidad de California sobre los sistemas BSD ('B' es Berkeley, donde se encuentra la Universidad de California). La gente de Berkeley había reemplazado toda la fuente original de AT&T con un nuevo código, y ese nuevo código se convirtió en el antepasado de al menos el país de usuarios de NetBSD. AT&T y UCB llegaron a un acuerdo en 1994, revelado al público en 2004.

Naturalmente, al menos las ideas se polinizan de forma cruzada, por lo que hay al menos una similitud conceptual entre GNU y BSD, pero los casos de esquina definitivamente difieren.

Bruce Ediger
fuente
1
Ambos enlaces apuntan a una ubicación.
entonces, ¿eso tiende a ser para uso práctico de shell? banderas largas y vitrinas?
strugee
12
Mi experiencia también es que GNU toma la escalabilidad más en serio. Tal vez eso también cuente como "casos de esquina", pero es muy frustrante, de hecho, cuando se sedahoga en líneas de entrada largas o se grepproduce una falla en los datos binarios.
tripleee
Una gran diferencia es que GNU nunca tuvo su propio núcleo, mientras que BSD se basó y construyó en su propio núcleo, que, en parte, es ampliamente utilizado en sistemas comerciales de Unix. MAC OS X usa Darwin como un Kernel basado en BSK, por ejemplo.
visualización
@visualication Ahí está GNU HURD pero aún no se ha lanzado
Dmitry Kudriavtsev