Quais são as principais diferenças entre a área de usuário do BSD e GNU / Linux?

38

Eu li muito no Unix e Linux sobre BSDs e GNU, etc. Mas ainda não entendo quais são as diferenças práticas e reais entre as áreas de usuários do BSD e GNU, apesar do fato de serem frequentemente mencionadas. Alguém pode elaborar?

Ao responder, explique completamente as conexões históricas, tendo em mente que eu não estou vivo há tempo suficiente para ter passado por um momento em que o GNU / Linux não era o UNIX convencional (exceto o OS X).

strugee
fonte
2
Publiquei uma lista de diferenças do GNU / Linux no OS X no ambiente de linha de comando aqui: reddit.com/r/commandline/comments/4jydnw/… .
Nisetama

Respostas:

28

O termo "userland" pode se referir a muitas coisas em diferentes contextos, mas aqui interpreto "GNU userland" vs "BSD userland" como o conjunto mínimo padrão de programas que acompanham uma distribuição.

A grande diferença principal é que as duas terras do usuário começam com um código fonte completamente diferente. Código-fonte do gato GNU Código-fonte do gato NetBSD . Apenas a partir desse programa de conceito simples, você pode ver que o gato do NetBSD usa sinalizadores de linha de comando tradicionais de uma letra. Os programas GNU tendem a ter sinalizadores de uma letra, mas também as --something-longopções de tipo. Os programas GNU também tendem à compatibilidade com POSIX.

Essa diferença no código fonte emprestará aos dois usuários diferentes comportamentos em alguns casos.

Também parece que o NetBSD (pelo menos) usa sua própria versão da libc, a biblioteca C padrão. Estou pensando bem aqui, mas libc e links dinâmicos são estranhamente inter-relacionados. Novamente, código-fonte diferente levará a um comportamento diferente.

Eu acho que, como usuário do shell, você descobriria que psagiria diferente e lspoderia fornecer uma saída ligeiramente diferente da que você está acostumado. Você precisaria encontrar sinalizadores de linha de comando equivalentes para alguns programas, se você usar o --long-optiontipo de sinalizadores de linha de comando.

Historicamente, meu entendimento é que o usuário do BSD descende mais diretamente do Bell Labs Unix V6 e V7, através da porta 32V para o hardware VAX. A área de usuários do GNU é mais recente, escrita pelo menos um pouco em reação às tentativas da AT&T de manter o código em segredo bem guardado no início dos anos 80. Após a alienação do sistema Bell de 1983, a AT&T tentou "monetizar" o Unix. Parte disso foi licenciar o código fonte de uma maneira que impedisse a maioria das pessoas de vê-lo. Richard Stallman e outros tiveram problemas com isso. Seu projeto GNU existia especificamente para criar um sistema do tipo Unix livremente compartilhável.

Enquanto isso, em 1993, a AT&T processou o sistema da Universidade da Califórnia pelo sistema BSD ('B' é Berkeley, onde está localizada a Universidade da Califórnia). As pessoas em Berkeley haviam substituído toda a fonte original da AT&T por um novo código, e esse novo código se tornou o ancestral de pelo menos a terra de usuários do NetBSD. A AT&T e a UCB chegaram a um acordo em 1994, revelado ao público em 2004.

Naturalmente, pelo menos as idéias polinizam, portanto há pelo menos uma similaridade conceitual entre a área de usuário do GNU e o BSD, mas os casos de canto definitivamente diferem.

Bruce Ediger
fonte
11
Ambos os links apontam para um local.
então isso costuma ser para uso prático do shell? bandeiras longas e caixas de canto?
strugee
12
Minha experiência também é que o GNU leva a escalabilidade mais a sério. Talvez isso também conte como "casos de canto", mas é realmente muito frustrante quando você sedengasga com longas linhas de entrada ou se grepsegfaults em dados binários.
tripleee
uma grande diferença é que o GNU nunca teve seu próprio kernel enquanto o BSD era baseado no próprio kernel, que, em partes, é amplamente usado em sistemas comerciais unix. O MAC OS X usa o Darwin como um kernel baseado em BSK, por exemplo.
visualização
@visualication Existe o GNU HURD, mas que ainda não foi lançado #
Dmitry Kudriavtsev