GNU Hurd | |
---|---|
Versão do sistema operativoUnix-like | |
![]() | |
![]() HURD Live CD | |
Produção | Projeto GNU Thomas Bushnell Roland McGrath Marcus Brinkmann Neal Walfield |
Linguagem | Assembly,C |
Modelo | Código Aberto e Livre |
Lançamento | 1 de novembro de1993 (31 anos)[1] |
Versão estável | 0.9 / 18 de dezembro de 2016; há 8 anos[2] |
Versão em teste | / |
Arquitetura(s) | i386 |
Núcleo | Microkernel |
Interface | Bash |
Licença | GNU General Public License |
Página oficial | www.gnu.org/software/hurd/ |
Estado de desenvolvimento | |
Corrente |
GNU Hurd (também conhecido comothe Hurd ou apenasHurd) é ummicronúcleo multi-servidor escrito como parte doGNU, desenvolvido para substituir oUnix[3] e publicado comosoftware livre, sob a licençaGNU General Public License.
O seu desenvolvimento tem sido contínuo desde1990 pela equipe doProjeto GNU daFree Software Foundation. OGNU Hurd consiste num conjunto de protocolos eprocesso de servidores (oudaemons, em terminologiaUnix) que correm no microkernelGNU Mach; juntando tudo, tenciona-se formar okernel dosistema operacionalGNU.[3] O Hurd pretende ultrapassar o kernel do sistema operacionalUnix em funcionalidade, segurança e estabilidade, enquanto se mantém bastante compatível a eles. O projeto GNU escolheu para o sistema operacional aarquitetura microkernel servidor–cliente, ao notar ganhos sobre o tradicional arquiteturakernel monolítico Unix. Isto é alcançado no Hurd através da implementação da especificaçãoPOSIX (entre outros), mas eliminando as restrições arbitrárias aosusuários.[4]
Em dezembro de 1991, o arquiteto principal do Hurd explicou que "HURD" é umacrônimo indiretamente recursivo para "HIRD of Unix-Replacing Daemons", em que "HIRD" significa "HURD of Interfaces Representing Depth". A opinião que prevalece atualmente na equipe é de que Hurd é um substantivo concreto.[5][6]
É hora [de] explicar o significado de "Hurd". "Hurd" significa "Hird dedaemons substituindoUnix". E, então, "Hird" significa "Hurd de interfaces representando profundidade". Temos aqui, ao meu conhecimento, o primeiro software a ser nomeado por um par de siglas mutuamente recursivas.— Thomas Bushnell
Ainda em estágio de desenvolvimento, os próprios (e pouquíssimos) desenvolvedores pedem ajuda a pessoas conhecedoras daLinguagem C (tanto para o desenvolvimento do núcleo quanto para o porte de aplicativos), assim como pessoas que tenham disponibilidade para efetuar testes e reportar falhas.
Como ambos "Hurd" e "Hird" sãohomófonos da palavra em Inglês "rebanho" (herd), o nome completoGNU Hurd também é uma brincadeira com as palavrasrebanho degnus, refletindo como o kernel funciona[7]. O logotipo é chamado de caixas Hurd e isso também reflete na arquitetura. O logotipo é um gráfico onde os nós representam servidores do kernel Hurd e as bordas são dirigidas IPC. Mensagens[6]
Devido ao estado da tecnologia microkernel, a sigla duplamente recursiva é muitas vezes referida pelos especialistas como a característica mais interessante do GNU Hurd.[8]
ORichard Stallman fundou oprojeto GNU em setembro de 1983 com a finalidade de criar o sistema operacionallivreGNU. Inicialmente os componentes necessários para o kernel e seu desenvolvimento foram escritos:editores,shell,compilador e todos os outros. Em 1989, foi criado oGPL e "só" faltava um importante componente: o kernel.[9][10]
O desenvolvimento do Hurd começou em 1990 depois de ter abandonado uma tentativa de construir o kernel em 1986, baseado na investigação do sistema operacionalTRIX desenvolvido pelo professor Steve Ward e seu grupo emMIT's laboratório de informática (LCS).[11] De acordo com Thomas Bushnell, o arquiteto inicial do Hurd, o plano inicial era adaptar o kernel4.4BSD-Lite kernel e, em retrospecto, "É perfeitamente óbvio a mim que isto iria ter um sucesso esplêndido e que o mundo seria muito diferente hoje".[12] Em 1987Richard Stallman propôs utilizar oMach microkernel desenvolvido naUniversidade Carnegie Mellon (CMU). O trabalho foi atrasado três anos devido incerteza se a CMU iria liberar o código Mach numa licença correspondente.[11]
Com a publicação doKernel Linux em 1991, o usuário primário das ferramentas e componentes GNU deespaço de usuário em breve se tornaram sistemas operacionais construídos sobre okernel Linux, solicitando acontrovérsia do termoGNU/Linux.
Desenvolvimento do Hurd têm ocorrido lentamente. Apesar dos anúncios positivos de Stallman em 2002 prevendo a publicação do GNU/Hurd mais tarde nesse ano,[13] o Hurd ainda não é considerado adequado para ambientes de produção. O seu desenvolvimento, em geral, não atingiu as expectativas, e ainda há bugs e falta particularidade.[14] Isso resultou em um produto mais pobre do que muitos (inclusive o Stallman) esperavam.[15] Em 2010, após 20 anos em desenvolvimento, Stallman disse que ele "não era muito otimista sobre o GNU Hurd. Faz algum progresso, mas para ser realmente superior seria necessário resolver muitos problemas complexos", mas acrescentou que "o acabamento não é crucial" para o sistema operacional GNU porque um kernel livre já existia (Linux), e completando Hurd não resolveria o principal problema restante para um sistema operacional livre: suporte a dispositivos.[16]
O projetoDebian, entre outros, trabalhou no projeto Hurd para produzir distribuições binárias doSistemas operacionais baseados em kernel Hurd para sistemascompatíveis com IBM PC.[8]
Ao contrário da maioria de kernelsUnix-like, o Hurd utiliza uma arquiteturacliente-servidor, construída em ummicrokernel, que é responsável por fornecer os serviços mais básicos do kernel - coordenar o acesso aohardware: o CPU (aescalonamento de processos egerenciamento de processos), RAM (viagerenciamento de memória), e vários outros dispositivos deentrada/saída (viaagendamento I/O) para som, gráficos, armazenamento de massa, etc. Em teoria, o projeto microkernel permitiria a todos os drivers de dispositivo serem construídos como servidores que trabalham emespaço do usuário, mas hoje a maioria dos drivers desse tipo é ainda contida noespaço do kernel noGNU Mach.[17]
De acordo com os desenvolvedores do Hurd, a principal vantagem do projeto baseado em microkernel é a capacidade de estender o sistema: o desenvolvimento de um novo módulo não exige conhecimento profundo do resto do kernel e um bug em um módulo não trava o sistema inteiro. Hurd fornece um conceito de tradutores, uma estrutura de módulos usados para estender a funcionalidade do sistema de arquivos[18]
Desde cedo, o Hurd foi desenvolvido para usarGNU Mach como o microkernel. Esta foi uma decisão técnica feita porRichard Stallman, que pensou que iria acelerar o trabalho de salvar uma grande parte dela. Ele admitiu que estava errado sobre isso[19]. Outros sistemas Unix-like que trabalham noMach microkernel incluemOSF/1,Lites eMkLinux.Mac OS X eNeXTSTEP usamnúcleos híbridos baseados no Mach.
De 2004 em diante, vários esforços foram lançados para portar o Hurd para microkernels mais modernos. O L4 microkernel era a escolha original em 2004, mas desacelerou a um impasse. No entanto, em 2005, o desenvolvedor Hurd, Neal Walfield, terminou a estrutura de gerenciamento de memória inicial para a porta L4/Hurd e Marcus Brinkmann portou as partes essenciais deglibc, ou seja, obteve o código de inicialização do processo de trabalho, permitindo assim que os primeiros programas de usuários (os triviais, como oprograma Olá Mundo em C) possam ser executados.
Desde 2005, Brinkmann e Walfield começaram a pesquisar sobre oCoyotos como um novo kernel para HURD.[20][21] Em 2006, Brinkmann conheceu Jonathan Shapiro (o principal arquiteto do sistema operacional Coyotos) para ajudar e discutir o uso do kernel Coyotos para GNU/Hurd. Uma discussão mais aprofundada dos desenvolvedores HURD levou a conclusão de que o Coyotos (bem como outros núcleos similares) não são adequados para o Hurd.
Em 2007, os desenvolvedores do Hurd, Neal Walfield e Marcus Brinkmann, fizeram uma crítica da arquitetura Hurd, conhecida como "a crítica"[22], e uma proposta de como o futuro sistema pode ser projetado, conhecido como "o papel de posição".[23] Em 2008, Neal Walfield começou a trabalhar no microkernel Viengoos como um kernel nativo moderno para HURD. A partir de 2009, o desenvolvimento em Viengoos está em pausa devido à falta de tempo que Walfield tem para trabalhar nele.[24]
Enquanto isso, os outros continuaram a trabalhar na variante Mach do Hurd.[25]
Uma série de conceitos tradicionais do Unix são substituídos ou extensíveis no Hurd.
No Unix, cada programa em execução tem umuser id associado, que normalmente corresponde ao usuário que iniciou oprocesso. Este id amplamente dita as ações permitidas para o programa. Nenhum processo exterior pode mudar o ID de usuário de um programa em execução. Um processo Hurd, por outro lado, é executado sob umaset no IDs de usuário, que pode conter vários ids, um ou nenhum. Um processo suficientemente privilegiado pode adicionar e remover ids para outro processo. Por exemplo, existe um servidor de senha que irá distribuir ids em troca de uma senha delogin correta.
Quanto aosistema de arquivos, um programa adequado pode ser designado como umtradutor para um único arquivo ou uma hierarquia de diretório inteiro. Todo o acesso ao processo traduzido, ou abaixo de uma hierarquia de arquivos, no segundo caso, é, de fato, processado pelo programa. Por exemplo, um arquivo tradutor pode simplesmente redirecionar operações de ler e escrever para outro arquivo, e não ao contrário de umlink simbólico Unix. O efeitomontagem do Unix é alcançado através da criação de um sistema de arquivos tradutor (usando o comando "settrans"). Os tradutores também podem ser usados para fornecer serviços ao utilizador. Por exemplo, o tradutorftpfs permite que um usuário encapsule sites FTP remotos dentro de um diretório. Em seguida, as ferramentas padrão, comols,cp erm podem ser usados para manipular arquivos no sistema remoto. Mesmo os tradutores mais poderosos são aqueles, comoUnionFS, que permitem um usuário unificar vários diretórios em um, listando, assim, o diretório unificado revela o conteúdo de todos os diretórios (um recurso que está faltando em muitos sistemas Unix, embora disponível nos modernosBSDs).
O Hurd requer umboot loader compatível commultiboot, como oGRUB.
De acordo com a documentação Debian existem 24 servidores (18 servidores centrais e seis servidores do sistema de arquivos) nomeados da seguinte forma:[26]
Os servidores, coletivamente, implementam oPOSIXAPI com cada servidor implementando parte da interface. Por exemplo, os vários servidores de sistemas de arquivos individualmente implementam as chamadas de sistema de arquivos. O servidor de armazenamento vai funcionar como uma camada de wrapping, semelhante à camada de bloqueio do Linux. O equivalente aVFS noLinux é conseguido atravéslibdiskfs e bibliotecaslibpager.
As distribuições baseadas em HurdGNU incluem:
Este é o caminho, também, que as pessoas pensavam que era a maneira mais limpa possível de projetar kernels em 1990. Bem, demorou muitos muitos muitos anos para conseguir este kernel para funcionar em tudo, e ainda não funciona bem, e parece que pode haver problemas fundamentais com este projeto, que ninguém conhecia em 1990.
Assumo total responsabilidade pela decisão técnica para desenvolver o kernel GNU baseado no Mach, uma decisão que parece ter sido responsável pela lentidão no desenvolvimento. Pensei usando Mach iria acelerar o trabalho, salvando-nos em grande parte do trabalho , mas eu estava errado.