Saltar para o conteúdo

GNU Hurd

Origem: Wikipédia, a enciclopédia livre.
GNU Hurd
Versão do sistema operativo Unix-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 de 1993 (31 anos)[1]
Versão estável 0.9 / 18 de dezembro de 2016; há 7 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 como the Hurd ou apenas Hurd) é um micronúcleo multi-servidor escrito como parte do GNU, desenvolvido para substituir o Unix[3] e publicado como software livre, sob a licença GNU General Public License.

O seu desenvolvimento tem sido contínuo desde 1990 pela equipe do Projeto GNU da Free Software Foundation. O GNU Hurd consiste num conjunto de protocolos e processo de servidores (ou daemons, em terminologia Unix) que correm no microkernel GNU Mach; juntando tudo, tenciona-se formar o kernel do sistema operacional GNU.[3] O Hurd pretende ultrapassar o kernel do sistema operacional Unix em funcionalidade, segurança e estabilidade, enquanto se mantém bastante compatível a eles. O projeto GNU escolheu para o sistema operacional a arquitetura microkernel servidor–cliente, ao notar ganhos sobre o tradicional arquitetura kernel monolítico Unix. Isto é alcançado no Hurd através da implementação da especificação POSIX (entre outros), mas eliminando as restrições arbitrárias aos usuários.[4]

Em dezembro de 1991, o arquiteto principal do Hurd explicou que "HURD" é um acrô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 de daemons substituindo Unix". 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 da Linguagem 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ão homófonos da palavra em Inglês "rebanho" (herd), o nome completo GNU Hurd também é uma brincadeira com as palavras rebanho de gnus, 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]

Desenvolvimento e história

[editar | editar código-fonte]

O Richard Stallman fundou o projeto GNU em setembro de 1983 com a finalidade de criar o sistema operacional livre GNU. Inicialmente os componentes necessários para o kernel e seu desenvolvimento foram escritos: editores, shell, compilador e todos os outros. Em 1989, foi criado o GPL 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 operacional TRIX desenvolvido pelo professor Steve Ward e seu grupo em MIT's laboratório de informática (LCS).[11] De acordo com Thomas Bushnell, o arquiteto inicial do Hurd, o plano inicial era adaptar o kernel 4.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 1987 Richard Stallman propôs utilizar o Mach microkernel desenvolvido na Universidade 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 do Kernel Linux em 1991, o usuário primário das ferramentas e componentes GNU de espaço de usuário em breve se tornaram sistemas operacionais construídos sobre o kernel Linux, solicitando a controvérsia do termo GNU/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 projeto Debian, entre outros, trabalhou no projeto Hurd para produzir distribuições binárias do Sistemas operacionais baseados em kernel Hurd para sistemas compatíveis com IBM PC.[8]

Estrutura geral de sistemas operacionais baseados em kernel monolítico, microkernel e kernel híbrido, respectivamente

Ao contrário da maioria de kernels Unix-like, o Hurd utiliza uma arquitetura cliente-servidor, construída em um microkernel, que é responsável por fornecer os serviços mais básicos do kernel - coordenar o acesso ao hardware: o CPU (a escalonamento de processos e gerenciamento de processos), RAM (via gerenciamento de memória), e vários outros dispositivos de entrada/saída (via agendamento 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 em espaço do usuário, mas hoje a maioria dos drivers desse tipo é ainda contida no espaço do kernel no GNU 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 usar GNU Mach como o microkernel. Esta foi uma decisão técnica feita por Richard 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 no Mach microkernel incluem OSF/1, Lites e MkLinux. Mac OS X e NeXTSTEP usam núcleos híbridos baseados no Mach.

Outros microkernels

[editar | editar código-fonte]

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 de glibc, 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 o programa Olá Mundo em C) possam ser executados.

Desde 2005, Brinkmann e Walfield começaram a pesquisar sobre o Coyotos 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]

Extensões Unix

[editar | editar código-fonte]

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 um user id associado, que normalmente corresponde ao usuário que iniciou o processo. 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 uma set 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 de login correta.

Quanto ao sistema de arquivos, um programa adequado pode ser designado como um tradutor 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 um link simbólico Unix. O efeito montagem 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 tradutor ftpfs permite que um usuário encapsule sites FTP remotos dentro de um diretório. Em seguida, as ferramentas padrão, como ls, cp e rm podem ser usados para manipular arquivos no sistema remoto. Mesmo os tradutores mais poderosos são aqueles, como UnionFS, 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 modernos BSDs).

O Hurd requer um boot loader compatível com multiboot, como o GRUB.

A arquitetura dos servidores

[editar | editar código-fonte]

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]

Servidores Núcleo

[editar | editar código-fonte]
  • auth (servidor de autenticação): Recebe solicitações e senhas de programas e dá-lhes um ID, que muda os privilégios do programa.
  • crash (servidor de travamento): Aceita todos os erros fatais.
  • exec (servidor de execução): Traduz uma imagem executável (corrente ELF e a.out que são suportadas) rodando uma imagem executável na memória.
  • fifo (tradutor FIFO): Implementa pipes nomeados.
  • new-fifo (novo servidor FIFO): Um servidor alternativo para pipes nomeados.
  • firmlink (o tradutor firmlink): Implementa firmlinks - "a meio caminho entre a link simbólico e um link duro"[27]
  • fwd (servidor forward): encaminha solicitações para outros servidores, usado por servidores de FIFO e symlink.
  • hostmux (servidor de multiplexador host)
  • ifsock (servidor para a interface de sockets): Ajuda com domínio endereços de soquetes UNIX.
  • init (servidor init): O sistema básico de inicialização e configuração.
  • magic (servidor magic): Sinaliza que uma pesquisa de nome deve ser resolvida internamente por um processo quando o resultado envolve o estado do mesmo.
  • null (servidor null): Implementa /dev/null e [/dev/zero /dev/zero].
  • pfinet (servidor pfinet): Implementa o protocolo da familia PF_INET.
  • pflocal (servidor pflocal): Implementos soquetes de domínio Unix.
  • proc (servidor process): Atribui PID s e gere ações a nível de processo.
  • symlink (tradutor link simbólico): Implementa links simbólicos para os sistemas de arquivos que não os suportam.
  • term (servidor de terminal): Um terminal POSIX.
  • usermux (servidor de usuário multiplexador): Invoca tradutores específicos do usuário.

Servidores do Sistema de Arquivos

[editar | editar código-fonte]
Ext2fs
O tradutor para o sistema de arquivos ext2. Ele recebe blocos de disco do microkernel e dando arquivos e diretórios para as aplicações.
Isofs
O tradutor para o sistema de arquivos ISO 9660. Traduz blocos de um CD ou DVD para arquivos e diretórios para as aplicações.
Nfs
Veja Network File System.
Ufs
Tradutor para o sistema de arquivos BSD com o mesmo nome, UFS.
Ftpfs
File Transfer Protocol tradutor de sistema de arquivo.
Storeio
O tradutor de armazenamento.

Os servidores, coletivamente, implementam o POSIX API 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 a VFS no Linux é conseguido através libdiskfs e bibliotecas libpager.

Distribuições GNU rodando Hurd

[editar | editar código-fonte]

As distribuições baseadas em Hurd GNU incluem:

Referências

  1. «Situação do Hurd e chamada a voluntários» (em inglês). Consultado em 24 de maio de 2013 
  2. «GNU Hurd 0.9, GNU Mach 1.8, GNU MIG 1.8 released.» (em inglês). Consultado em 26 de maio de 2017 
  3. a b «What Is the GNU Hurd?». GNU. Consultado em 4 de março de 2010 
  4. «vantagens». GNU (em inglês). Consultado em 7 de dezembro de 2013 
  5. «Grammatically speaking...». Consultado em 24 de maio de 2013  Texto "lingua»Inglês" ignorado (ajuda)
  6. a b Vervloesem, Koen (7 de Julho de 2010). «The Hurd: GNU's quest for the perfect kernel» (em inglês). LWN.net. Consultado em 5 de outubro de 2012 
  7. «GNU Hurd: Origin of the Name». GNU. Consultado em 4 de março de 2010 
  8. a b Doeppner, Thomas W. "Operating System Design." Computer Science 167. Brown University. Providence, RI, Oct 1, 2011.
  9. Hillesley, Richard (30 de junho de 2010). «GNU HURD: Altered visions and lost promise» (em inglês). Consultado em 1 de outubro de 2012 
  10. «Linux and the GNU Project». GNU. 26 de janeiro de 2010. Consultado em 4 de março de 2010 
  11. a b «The GNU Hurd History, "How it Started"». GNU. Consultado em 27 de agosto de 2006 
  12. Salus, Peter H. «The Daemon, the GNU and the Penguin». The Hurd and BSDI. Consultado em 8 de agosto de 2006 
  13. Ribeiro, John (11 de março de 2002). «Free Software Sees GNU Loose of Linux». PC World. Consultado em 5 de outubro de 2012. Arquivado do original em 22 de setembro de 2016 
  14. «Status». GNU. Consultado em 4 de março de 2010 
  15. Stallman, Richard (9 de março de 2006). «The Free Software Movement and the Future of Freedom» (ogg). Free Software Foundation. Zagreb. Resumo divulgativo. 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. 
  16. Stallman, Richard (29 de julho de 2010). «RMS AMA». Reddit. Consultado em 7 de dezembro de 2011 
  17. Kousoulos, Constantine (21 de março de 2007). «Re: Device drivers in Mach?». bug-hurd (Lista de grupo de correio) 
  18. Thomas W. Doeppner (20 de dezembro de 2010). Sistemas Operacionais em profundidade.: Design e Programação. [S.l.]: John Wiley & Sons. p. 160. ISBN 978-0-471-68723 -8. Consultado em 29 de novembro de 2012 
  19. Stallman, Richard (12 de outubro de 2000). «In Defense of Red Hat». Linux Today. Consultado em 7 de dezembro de 2011. 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. 
  20. Shapiro, Jonathan S. (27 de outubro de 2005). «Re: A comment about changing kernels». l4-hurd (Lista de grupo de correio) 
  21. Bachmann, Tom (7 de julho de 2006). «Re: seL4, L4.sec and coyotos mess». l4-hurd (Lista de grupo de correio) 
  22. Walfield, Neal H.; Brinkmann, Marcus (julho de 2007). «A Critique of the GNU Hurd Multi-server Operating System» (PDF). GNU. Consultado em 7 de dezembro de 2011 
  23. Walfield, Neal H.; Brinkmann, Marcus (4 de janeiro de 2007). «Improving Usability via Access Decomposition and Policy Refinement» (PDF). GNU. Consultado em 7 de dezembro de 2011 
  24. «viengoos». GNU. Consultado em 4 de março de 2010 
  25. «What happened to the L4/Coyotos/viengoos micro-kernels?». GNU. Consultado em 7 de janeiro de 2011 
  26. «Preliminary GNU/Hurd User Interface Description». Debian. 10 de outubro de 1996. Consultado em 4 de março de 2010 
  27. «GNU/Hurd - Documentation». Debian. 10 de outubro de 1996. Consultado em 12 de julho de 2012 
  28. nixos.org
  29. «Nix-based GNU/Hurd System». Gnu.org. 21 de março de 2012. Consultado em 12 de julho de 2012 
  30. «GNU Hurd/ hurd/ running/ live cd». Consultado em 19 de Novembro de 2012 

Ligações externas

[editar | editar código-fonte]