O que torna uma distribuição GNU e existem distribuições Linux que não são GNU?

O que torna uma distribuição GNU e existem distribuições Linux que não são GNU?

Portanto, GNU/Linux é um sistema operacional que consiste no mínimo em vários programas: Linux kenel, gcc, gnu-binutils, Gnome desktop, etc.

  • O que torna 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 em Linux, mas não em GNU?

Responder1

OFundação de Software Livre argumentaque a maioria das distribuições Linux são na verdade sistemas GNU, que usam um kernel Linux. Eles baseiam esta 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 queo kernel era apenas a última peça que faltava. Eles estão certos ao dizer que praticamente todas as distribuições de desktops e servidores baseadas em Linux usam pelo menos alguns componentes GNU, talvez o mais importante seja oBiblioteca GNU C(glibc),Utilitários principais do GNU(coreutils) e oBashconcha. Além disso, o desenvolvimento do kernel Linux está inerentemente ligado ao GCC, devido aoutilização de extensões GCC.

Alguns sistemas embarcados, talvez mais notavelmente o Android do Google, não usam nenhum componente ou biblioteca GNU. No Android, por exemplo, a Biblioteca GNU C é substituída pela Biblioteca Bionic C do próprio Google, baseada em BSD. A FSF concorda que não é apropriado referir-se a tal sistema como"Sistemas GNU" ou "GNU/Linux", mas, por outro lado, eles também não gostariam que fossem chamados apenas de sistemas "Linux". Pelo menos podemos tirar a conclusão de que parece haver consenso sobre o fato de que usar ferramentas GNU para construir o kernel nãonãofaça de um sistema um "sistema GNU".

Responder2

A história da terminologia GNU/Linux remonta ao início da década de 1990.

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

Na época, 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 gratuitos semelhantes ao Unix baseados no kernel Linux) começaram a se formar em torno do novo projeto do kernel 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 Debian rapidamente se separaram de Stallman e da FSF, em parte por questões técnicas. Um problema, por exemplo, era que Stallman queria manter os símbolos de depuração no programa, enquanto o Debian queria retirá-los.

Depois que o Debian e a 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 havia entregado a liderança a ele. Como essas organizações se separaram em bons termos e compartilharam (e compartilham) objetivos comuns, os desenvolvedores Debian fizeram o que ele pediu. É claro que é verdade que Stallman promoveu tais nomes de forma independente, mas a cooperação de um sistema operacional real baseado em Linux em referir-se a si mesmo como tal tem sido significativa na promoção do uso de tal nome.

A justificativa apresentada 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, em certo sentido, a culminação/conclusão do projeto GNU, que vinha tentando obter um kernel funcional por algum tempo, então ele deveria usar esse nome como uma forma de reconhecer e lembrar as pessoas dos ideais do projeto GNU. A razão (a) tende a ser mencionada com mais frequência, embora não fosse exatamente verdade naquela época, e seja 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 têm sido, de facto, muito debatidos.

Até onde eu sei, apenas o Debian e (alguns de) seus derivados (seguindo o exemplo de seu pai) referem-se a si mesmos como GNU/Linux. No entanto, as outras distribuições chamadas Linux, como Fedora, Gentoo, etc., não são, em substância, diferentes do Debian - é basicamente o mesmo software. Portanto, temos igualmente boas razões para nos referirmos a eles como GNU/Linux.

Não existem muitos sistemas que usam o kernel Linux sem a área de usuário GNU, já que os dois, em grande parte, foram desenvolvidos juntos e estão interligados de várias maneiras. (Por exemplo, o kernel do Linux é escrito no C estendido (GNU) do gcc e não pode ser compilado com um compilador C padrão.) Como Thomas disse, o exemplo óbvio é o Android, mas como ele foi fortemente bifurcado pelo Google é questionável se é mais correto referir-se ao kernel do Android como Linux, embora se fale de uma fusão/reconciliação no futuro.

Por outro lado, é lamentável notar que Stallman e a FSF aparentemente pressionam bastante a terminologia GNU/Linux. Por exemplo, Jonathan Corbetescreveu em um comentário LWNque a FSF se recusa a falar com ele a menos que ele use o termo GNU/Linux. Jon, além de fundador do LWN, também é um desenvolvedor de kernel sênior e respeitado. Na íntegra, o comentário diz:

Só para deixar claro: paramos de pedir comentários à FSF há muitos anos porque a FSF se recusou a falar conosco sem promessas prévias sobre o que diríamos e quais termos usaríamos. Não estamos dispostos a fazer tais promessas. Se a política da FSF sobre estas questões tiver mudado, ficaríamos satisfeitos em saber disso.

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

A história acima é abordada com alguns detalhes no Capítulo 6 (“Boot Then Root”) de “Rebel Code” de Glyn Moody.

Responder3

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

Em uma distribuição GNU/Linux comum,Linuxfornece o kernel enquanto oProjeto GNUtraz as ferramentas da userland. 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 faltando um kernel. Embora eles tivessem oHurdkernel, estava demorando muito para ficar pronto. E entãoveio o Linuxcom a ajuda de um grande entusiasmo em torno dele, evoluiu mais rápido que o Hurd.

Agora você tem um userland e um kernel de dois projetos diferentes. E como cada um é essencial para ter um sistema operacional, por que não nomear a associaçãoGNU/Linuxentão cada projeto recebe sua parcela de crédito?

Você tem outras áreas de usuário como os utilitários BSD ouOcupadoBox. No entanto, eles são mais ou menos completos em comparação com os utilitários GNU e alguns softwares funcionarão apenas com um ambiente de usuário GNU. Por exemplo, a maioria dos sistemas operacionais BSD usa GCC como compilador enquantoLLVMem breve mudará esta situação.

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

Responder4

O que torna 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?

Sim e sim. O kernel é um executável monolítico independente.Tudomais reside em "país do usuário". Geralmente, os aplicativos de usuário fazem uso de pelo menos uma biblioteca de sistema, a biblioteca C padrão. 1 Além de várias funções utilitárias, é isso que fornece acesso às chamadas do sistema - solicitações para o sistema, ou seja, o kernel, fazer algo - que é necessário até mesmo 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 que neste caso as partes necessárias são compiladas e não externas. O compilador normalmente usado para isso é o GCC - a "GNU Compiler Collection" - e a biblioteca C é a glibc.

Como praticamente toda a área de usuário é compilada na glibc, ela é uma das coisas mais essenciais no sistema depois do kernel. Outro componente essencial é o vinculador, que conecta um executável a uma biblioteca externa. Esse também é um produto GNU.

Para ilustrar isso, você pode usar lddvários executáveis, incluindo bibliotecas (que são executáveis, mas não por si só). Como diz na página de manual, "ldd imprime as bibliotecas compartilhadas exigidas 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 "libc.so.6" - isso é glibc (não confunda com 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 estão vinculadas à libc. Vejamos 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 vinculador mencionado acima (geralmente, lde possui uma página de manual). Você não pode executar o ldd nele, mas filediz que está vinculado dinamicamente, presumo que seja libc (isso pode parecer circular, mas não é) e linux-vdso. Este último é interessante porque você notará apenas um endereço após o =>. Isso porque na verdade faz parte do kernel.

A biblioteca C, AFAIK, é aapenasobjeto compartilhado no sistema que não está vinculado à biblioteca C - está emo Centrode toda a bagunça. 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 possuem 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 gcco compilador "nativo" (uma vez que compila o kernel e a biblioteca C) não precisa estar presente no sistema, mas libc e ld estão, caso contrário, nada poderá funcionar.


Esse não é o único conjunto de coisas que o GNU oferece. Eles também são responsáveis ​​pelo bashshell e outras ferramentas e utilitários básicos que tornam o sistema semelhante ao *nix e (principalmente) compatível com POSIX. E o GNOME, um dos primeiros DE's Linux e um dos mais utilizados. E o mencionado acima, que fornece muitas funções de alto nível para suportar coisas como GNOME e outros DEs. O GNOME é construído em GTK, que foi originalmente desenvolvido para o GIMP. GTK também é fundamental para vários outros DE; GTK e o GIMP também são produtos GNU. Eles fizeram muitas coisas.


1 Existe um aplicativo de usuário que não se vincula a nenhuma biblioteca; estes são chamadosestáticoexecutáveis ​​e isso significa essencialmente que partes dessa biblioteca foram compiladas neles (assim como o kernel faz).

informação relacionada