O que faz uma distribuição GNU e existem distribuições Linux que não são GNU? [duplicado]

4

Então o GNU / Linux é um sistema operacional, consistindo de vários programas no mínimo: Linux kenel, gcc, gnu-binutils, desktop Gnome, etc.

  • O que faz uma distribuição Linux GNU? São as ferramentas com as quais o kernel foi compilado? São as ferramentas com as quais a distribuição é enviada?

  • Existem sistemas operacionais de desktop totalmente funcionais, baseados no Linux, mas não no GNU?

por Vorac 03.10.2013 / 14:09

4 respostas

2

Um sistema operacional é uma combinação de um kernel e uma área de usuário. Basicamente, o kernel gerencia o hardware enquanto o userland fornece uma interface abrangente para os usuários.

Em uma distribuição GNU / Linux comum, o Linux fornece o kernel enquanto o Projeto GNU traz as ferramentas do usuário. O GNU foi iniciado muito antes do Linux e fornece uma grande quantidade de utilitários para construir um sistema operacional completo.

No entanto, eles estavam perdendo um kernel. Embora eles tivessem o kernel Hurd , estava demorando demais para ficar pronto. E então veio o Linux com a ajuda de um grande entusiasmo em torno dele, evoluiu mais rápido que o Hurd.

Agora você tem uma área de usuário e um kernel de dois projetos diferentes. E como cada um é essencial para ter um sistema operacional, por que não nomear a associação GNU / Linux para que cada projeto seja fornecido a sua parte do crédito?

Você tem outras userlands como os utilitários BSD ou BusyBox . No entanto, eles são mais ou menos completos em comparação com os utilitários GNU e alguns softwares funcionarão apenas com uma área de usuário GNU. Por exemplo, a maioria dos sistemas operacionais BSD está usando o GCC como compilador, enquanto LLVM mudará em breve esta situação.

E como um sistema operacional universal, você pode executar o Debian com um kernel do FreeBSD e uma área de usuário GNU .

    
por 03.10.2013 / 14:55
11

O A Free Software Foundation argumenta que a maioria dos As distribuições Linux são na verdade sistemas GNU, que por acaso usam um kernel Linux. Eles baseiam essa afirmação no fato de que o GNU era um projeto de longa data para desenvolver um sistema operacional livre antes do surgimento do Linux, e que o kernel era apenas a última peça faltante . Eles estão certos em que praticamente todas as distribuições de servidor e desktop baseadas em Linux usam pelo menos alguns componentes GNU, talvez o mais importante é o GNU C Library (glibc), GNU Core Utilitários (coreutils) e o shell Bash . Além disso, o desenvolvimento do kernel do Linux é inerentemente ligado ao GCC, devido aos utilização das extensões do GCC .

Alguns sistemas incorporados, talvez mais notavelmente o Android do Google, não usam componentes ou bibliotecas GNU. No Android, por exemplo, a Biblioteca GNU C é substituída pela Biblioteca Bionic C, baseada no próprio BSD. A FSF concorda que não é apropriado referir-se a tal sistema como "GNU systems "ou" GNU / Linux ", mas, por outro lado, eles não gostariam que estes fossem referidos apenas como" Linux "também. Pelo menos podemos chegar à conclusão de que parece haver consenso sobre o fato de que usar ferramentas GNU para construir o kernel não faz de um sistema um sistema GNU.

    
por 03.10.2013 / 14:54
8

A história da terminologia GNU / Linux remonta ao início dos anos 90.

Em 1991, Linus Torvalds começou o projeto do kernel Linux de seu quarto em Helsinque. Não muito tempo depois, o kernel do Linux começou a ganhar tração substancial, auxiliado pela ascensão da Internet.

O projeto GNU de Richard Stallman ainda planejava usar o microkernel HURD como o kernel do sistema operacional GNU planejado. No entanto, quando as distribuições Linux (sistemas operacionais livres baseados em Unix baseados no kernel do Linux) começaram a se formar em torno do novo projeto de kernel do Linux, Stallman ficou interessado. Quando o projeto Debian começou em 1993, sob a liderança de Ian Murdock, a FSF deu algum apoio financeiro ao jovem projeto. No entanto, os desenvolvedores do Debian rapidamente se separaram da Stallman e da FSF, em parte em questões técnicas. Um problema, por exemplo, era que Stallman queria reter os símbolos de depuração no programa, enquanto o Debian queria removê-los.

Depois que o Debian e o FSF se separaram, Stallman solicitou que o Debian se referisse a si mesmo como GNU / Linux. O pedido foi feito a Bruce Perens, já que Murdock lhe entregara a liderança. Como essas organizações se separaram em bons termos e compartilharam (e compartilharam) objetivos comuns, os desenvolvedores do Debian fizeram o que ele pediu. Claro que é verdade que Stallman promoveu esses nomes de forma independente, mas a cooperação de um sistema operacional baseado em Linux em se referir a si mesmo como tal tem sido significativa na promoção do uso de tal nome.

O raciocínio dado por Stallman incluía que (a) o núcleo do sistema, além do kernel Linux, era em grande parte ferramentas GNU, (b) o kernel Linux era de alguma forma a culminação / conclusão do projeto GNU, que Tentando obter um kernel funcional há algum tempo, ele deve usar esse nome como uma maneira de reconhecer e lembrar as pessoas dos ideais do projeto GNU. A razão (a) tende a ser mencionada com bastante frequência, embora não seja exatamente verdadeira então, e é ainda menos verdadeira agora, embora partes claramente importantes de um sistema operacional baseado em Linux dependam de ferramentas GNU, por exemplo. bash, gcc, binutils, gdb, libc etc., em alguns casos, estes podem ser substituídos por outras ferramentas. Assim, tais argumentos são pelo menos discutíveis e, de fato, têm sido muito debatidos.

Tanto quanto eu sei, apenas o Debian e (alguns de) seus derivados (seguindo o exemplo de seu pai) se referem a si mesmos como GNU / Linux. No entanto, as outras distribuições do Linux, como Fedora, Gentoo, etc., não são diferentes em essência do Debian - é basicamente o mesmo software. Então, tem-se uma boa razão para se referir a eles como GNU / Linux.

Não há muitos sistemas usando o kernel do Linux sem o GNU userland, já que os dois desenvolveram-se em grande parte juntos e estão interligados de várias maneiras. (Por exemplo, o kernel do Linux é escrito no estendido (GNU) C do gcc e não será compilado com um compilador C padrão.) Como Thomas disse, o exemplo óbvio é o Android, mas desde que foi muito bifurcado pelo Google É questionável se é correto se referir ao kernel do Android como Linux, embora falemos de uma fusão / reconciliação no futuro.

Em uma nota lateral, é lamentável notar que Stallman e a FSF aparentemente pressionam bastante a terminologia GNU / Linux. Por exemplo, Jonathan Corbet escreveu em um comentário do LWN que a FSF se recusa a falar com ele, a menos que ele use o termo GNU / Linux. Jon, além de ser um fundador do LWN, também é um desenvolvedor de núcleo sênior e respeitado. Em sua totalidade, o comentário diz:

Just to be clear on this: we stopped asking the FSF for comments many years ago because the FSF refused to talk to us without prior promises from us on what we would say and which terms we would use. We are unwilling to make such promises. If the FSF's policy on such things has changed, we would be pleased to know about it.

Esta é claramente uma referência à insistência na terminologia GNU / Linux, entre outras coisas.

O histórico acima é abordado com algum detalhe no Capítulo 6 ("Boot Then Root") de "Rebel Code" por Glyn Moody.

    
por 03.10.2013 / 14:38
1

What makes a Linux distribution GNU? Is it the tools, with which the kernel was compiled? Is it the tools, with which the distribution is shipped?

Sim e sim. O kernel é um executável autônomo monolítico. Tudo else reside em " userland ". Geralmente, os aplicativos userland utilizam pelo menos uma biblioteca do sistema, a biblioteca C padrão. 1 Além de várias funções utilitárias, é isso que fornece acesso a chamadas do sistema - solicitações para o sistema, ou seja, o kernel, para fazer alguma coisa - o que é necessário para tarefas muito básicas, como trabalhar com arquivos. A implementação da biblioteca C usada com o linux é glibc - a biblioteca GNU C.

O próprio kernel do linux é escrito em C, e também requer uma biblioteca C para funcionar - exceto neste caso as partes necessárias são compiladas, e não externas. O compilador normalmente usado para isso é o GCC - o "GNU Compiler Collection" - e a biblioteca C é glibc.

Como virtualmente todo o userland é compilado contra o glibc, é uma das coisas mais essenciais no sistema após o kernel. Outro componente essencial é o vinculador, que conecta um executável a uma biblioteca externa. Isso é um produto GNU também.

Para ilustrar isso, você pode usar ldd em vários executáveis, incluindo bibliotecas (que são executáveis, mas não por conta própria). Como diz a man page, "o ldd imprime as bibliotecas compartilhadas requeridas por cada programa ou biblioteca compartilhada especificada na linha de comando." Por exemplo:

> ldd /bin/bash
    linux-vdso.so.1 =>  (0x00007fff7348e000)
    libtinfo.so.5 => /lib64/libtinfo.so.5 (0x00007fdbdae7f000)
    libdl.so.2 => /lib64/libdl.so.2 (0x00007fdbdac7b000)
    libc.so.6 => /lib64/libc.so.6 (0x00007fdbda8c3000)
    /lib64/ld-linux-x86-64.so.2 (0x00007fdbdb0c8000)

Observe que "libc.so.6" - isso é glibc (não confunda com o glib, outro produto GNU fundamental para o Linux, mas não tão fundamental quanto o glibc). Se você olhar todas as outras coisas mencionadas (exceto a primeira, explicada abaixo), você notará que todas elas se ligam à libc. Vamos ver o próprio libc.so.6:

> ldd /lib64/libc.so.6
    /lib64/ld-linux-x86-64.so.2 (0x00007f9cefa04000)
    linux-vdso.so.1 =>  (0x00007fffb21ff000)

"ld-linux-x86-64.so.2" é o linkador mencionado acima (geralmente, ld , e tem uma página man). Você não pode executar o ldd nele, mas file diz que ele está dinamicamente vinculado, eu presumo que a libc (isso pode soar circular, mas não é) e linux-vdso. Este último é interessante porque você notará apenas um endereço após o => . Isso é porque na verdade é parte do kernel.

A biblioteca C, AFAIK, é o objeto compartilhado somente no sistema que não está vinculado à biblioteca C - está no centro de toda a confusão . Até mesmo a biblioteca base de outras linguagens compiladas usa libc, por exemplo:

> ldd libstdc++.so.6.0.17 
    linux-gate.so.1 =>  (0xf77b8000)
    libm.so.6 => /lib/libm.so.6 (0xf7684000)
    libc.so.6 => /lib/libc.so.6 (0xf74d2000)
    /lib/ld-linux.so.2 (0xf77b9000)
    libgcc_s.so.1 => /lib/libgcc_s.so.1 (0xf74b5000)

Observe que as bibliotecas e o vinculador têm vários pseudônimos implementados com links simbólicos (por exemplo, /lib64/ld-linux-x86-64.so.2 é, na verdade, /lib64/ld-2.15.so).

Observe também que gcc , o compilador "nativo" (já que compila o kernel e a biblioteca C) não precisa estar presente no sistema, mas libc e ld do or else nada pode funcionar.

Esse não é o único conjunto de coisas que o GNU fornece. Eles também são responsáveis pelo bash shell e outras ferramentas e utilitários essenciais que tornam o sistema * nix similar e (principalmente) compatível com POSIX. E o GNOME, um dos primeiros DEs do Linux e um dos mais utilizados. E o slib mencionado acima, que fornece muitas funções de alto nível para suportar coisas como um GNOME e outros DEs. O GNOME é baseado no GTK, que foi originalmente desenvolvido para o GIMP. O GTK também é fundamental para vários outros DEs; O GTK e o GIMP também são produtos GNU. Eles fizeram um monte de coisas.

1 Existe uma aplicação userland que não se liga a nenhuma biblioteca; estes são chamados de executáveis estáticos e isso essencialmente significa que eles tiveram partes dessa biblioteca compiladas neles (assim como o kernel faz).

    
por 03.10.2013 / 15:12