| Multics | ||||
|---|---|---|---|---|
Tela do Multics 12.8 com solicitação de login e alguns comandos | ||||
| Produção | MIT, GE, Honeywell e Bell Labs | |||
| Linguagem | PL/I e assembly | |||
| Modelo | Código aberto | |||
| Lançamento | 1969 | |||
| Versão estável | 12.8, de 10 de agosto de 2023 | |||
| Repositório | ||||
| Idioma | Inglês | |||
| Plataformas | GE-645 e computadores da série Honeywell 6000, como Honeywell 6180, Series-60/Level-68 e DPS-8/M | |||
| Núcleo | Monolítico | |||
| Interface | Linha de comando | |||
| Licença | Inicialmente proprietária. Licença Multics de software livre desde 2007 | |||
| Estado de desenvolvimento | ||||
| Sistema histórico maduro, ainda mantido, com emulador disponível | ||||
| Cronologia | ||||
|
| ||||
| Página oficial | multicians.org | |||
Multics, sigla de Multiplexed Information and Computing Service, é um dos primeiros sistemas operacionais de tempo compartilhado, baseado no conceito de memória de nível único. Nathan Gregory escreveu que o Multics "influenciou todos os sistemas operacionais modernos que vieram depois, dos microcomputadores aos mainframes".
O planejamento e o desenvolvimento do Multics começaram em 1964, em Cambridge, Massachusetts. O projeto reunia o MIT, que o liderava por meio do Projeto MAC, com Fernando Corbató, a General Electric e os Bell Labs. O sistema foi desenvolvido no computador GE-645, projetado especialmente para ele. A primeira máquina foi entregue ao MIT em janeiro de 1967. A GE comercializava seus computadores GE-635 com o Dartmouth Time-Sharing System, sob o nome "Mark I", e pretendia oferecer o GE-645 com Multics como um sucessor de maior capacidade. Os Bell Labs deixaram o projeto em 1969, quando ficou claro que ele não produziria um sistema utilizável a curto prazo. Pouco depois, a GE decidiu abandonar o setor de computadores e vendeu sua divisão à Honeywell em 1970. A Honeywell comercializou o Multics, mas teve sucesso limitado nas vendas.
O Multics tem recursos voltados à alta disponibilidade, pois foi concebido para oferecer computação como um serviço de utilidade pública, semelhante aos serviços de telefone e eletricidade. Para isso, o hardware e o software têm uma estrutura modular. A capacidade do sistema pode crescer com a adição de mais processamento, memória principal ou armazenamento em disco, conforme a necessidade. Cada arquivo tem sua própria lista de controle de acesso, o que permite compartilhar informações com flexibilidade e restringir o acesso quando necessário. O sistema também dispõe de mecanismos padronizados para a análise de desempenho e de mecanismos de otimização que se ajustam às condições de uso.
Apesar de suas deficiências, as ideias introduzidas pelo Multics se difundiram pela ciência da computação. Seu efeito mais duradouro na indústria de computadores foi inspirar a criação do Unix, que incorporou muitos de seus recursos e podia funcionar em hardware mais barato. O Unix foi desenvolvido nos Bell Labs para que a equipe que havia trabalhado no Multics pudesse prosseguir com suas pesquisas em máquinas menores, primeiro um PDP-7 e depois um PDP-11.
O Multics utiliza armazenamento de nível único para o acesso aos dados, sem uma separação rígida entre os arquivos, chamados de segmentos, e a memória dos processos. A memória de um processo consiste apenas nos segmentos mapeados em seu espaço de endereçamento. Para lê-los ou gravá-los, o processo usa instruções comuns da unidade central de processamento, ou CPU. O sistema operacional cuida da gravação das alterações em disco. Na terminologia POSIX, seria como se cada arquivo fosse mapeado por Mmap(). O Multics, porém, não tem uma memória de processo separada da memória que contém os arquivos mapeados, como ocorre no Unix. Toda a memória do sistema faz parte de algum segmento do sistema de arquivos, inclusive a memória temporária dos processos e suas pilhas no núcleo.
Os segmentos têm um limite de 256 quilopalavras, pouco mais de 1 MB, pois o hardware do Multics usa endereços de 18 bits para as palavras contidas em cada segmento. Arquivos maiores são chamados de "arquivos multissegmento" e recebem tratamento diferente. Na prática, o limite de 256 quilopalavras raramente era atingido, já que um megabyte de memória tinha um custo proibitivo.
Outra novidade do Multics foi a ligação dinâmica, que permite a um processo em execução usar rotinas externas ao adicionar ao seu espaço de endereçamento os segmentos que as contêm. Com isso, os aplicativos podem usar a versão mais recente de cada rotina externa. Essas rotinas ficam em outros segmentos e só são vinculadas quando um processo tenta executá-las pela primeira vez. Como cada processo pode ter suas próprias regras de busca, usuários diferentes podem usar versões diferentes das mesmas rotinas. Com a configuração adequada dos mecanismos de segurança do Multics, o código de outro segmento também pode acessar estruturas de dados mantidas por um processo distinto. A ligação dinâmica não exige bibliotecas de ligação dinâmica especiais, ou DLLs. Um programa pode se vincular dinamicamente a qualquer segmento executável ao qual tenha direito de acesso.
Para interagir com um aplicativo executado em parte como um daemon, em outro processo, o processo do usuário faz uma chamada de procedimento comum a um segmento de código ao qual se vinculou dinamicamente. Esse segmento implementa alguma operação do daemon e pode modificar os dados que ele mantém e utiliza. Depois de executar a ação necessária para iniciar a solicitação, uma instrução de retorno devolve o controle ao código do usuário.
O Multics também permite uma ampla reconfiguração durante o funcionamento. CPUs, bancos de memória e unidades de disco, entre outros componentes, podem ser adicionados ou retirados sem interromper a operação. No sistema do MIT, onde foi feita a maior parte do desenvolvimento inicial, era comum dividir o sistema multiprocessado em dois fora dos horários de maior uso. Os componentes eram retirados aos poucos, até formar um segundo sistema funcional, enquanto o restante permanecia disponível aos usuários que já estavam conectados. O segundo sistema era usado para testar alterações no software. Depois, seus componentes eram reincorporados ao sistema principal, sem que fosse necessário desligá-lo. O Multics está entre os primeiros sistemas multiprocessados.
A segurança foi um objetivo do Multics desde o início do projeto. Mesmo assim, suas primeiras versões foram invadidas repetidas vezes. Essas falhas levaram a novos trabalhos para reforçar a segurança, que anteciparam técnicas de engenharia de segurança usadas depois em outros sistemas. A segunda geração de hardware trouxe suporte a anéis de proteção, que ampliavam o conceito de modo supervisor ao distribuir os privilégios por diferentes níveis. Em 1973, uma equipe da Força Aérea dos Estados Unidos e da MITRE testou a segurança do Multics em um projeto chamado ZARF.
O Multics foi o primeiro sistema operacional com um sistema de arquivos hierárquico. Os arquivos e diretórios podiam ter mais de um nome, geralmente uma forma longa e outra curta, e o sistema também permitia ligações simbólicas entre diretórios. No núcleo, cada processo tem suas próprias pilhas, com uma pilha separada para cada anel de proteção. O Multics também foi o primeiro a implementar o interpretador de comandos como um programa comum do usuário, ideia adotada depois pelo shell do Unix. Foi ainda um dos primeiros sistemas operacionais escritos em linguagem de alto nível, o PL/I do Multics, depois do Burroughs MCP, escrito em ESPOL, uma versão ampliada de ALGOL.
O uso do Multics em ambientes com exigências de segurança também levou à criação de aplicativos de apoio. Em 1975, Morrie Gasser, da MITRE Corporation, desenvolveu um gerador de palavras aleatórias pronunciáveis para atender às exigências de senha de instalações como o Air Force Data Services Center, ou AFDSC, que processava informações sigilosas. Para evitar senhas fáceis de adivinhar, o centro decidiu atribuí-las aos usuários, mas concluiu que a escolha manual exigiria trabalho administrativo demais. Gasser pesquisou e desenvolveu um gerador em PL/I. O programa combinava unidades de letras em sílabas por meio de regras de pronúncia, com uma aproximação de segunda ordem do inglês. As regras buscavam conciliar a facilidade de pronúncia com a aleatoriedade, avaliada estatisticamente em comparação com outros métodos. Uma versão derivada desse gerador foi incorporada ao Multics durante o Projeto Guardian.
O desenvolvimento do Multics começou em 1964, para o mainframe GE-645, um computador de 36 bits. A Honeywell adquiriu a divisão de computadores da GE, inclusive o Multics, em 1970. Por volta de 1973, o sistema passou a funcionar nos computadores Honeywell 6180, que traziam melhorias de segurança, entre elas o suporte em hardware a anéis de proteção.
Os Bell Labs deixaram o projeto em 1969, quando ficou claro que não haveria um sistema utilizável em um futuro próximo. Parte de seus participantes passou a desenvolver o Unix. O trabalho no Multics prosseguiu no MIT e na General Electric. No MIT, o uso do sistema diminuiu em 1975 e ainda não havia voltado aos níveis anteriores em 1976. Em 1978, o instituto conseguiu atrair usuários de volta ao Multics ao reduzir bastante os preços.
Em 1974, a Honeywell firmou um contrato de desenvolvimento com a Força Aérea, com o MIT como subcontratado, para criar um núcleo de segurança para o Multics. O trabalho previa reduzir a parte central do sistema, chamada de hardcore, transferindo componentes do supervisor para fora do anel 0. Depois da avaliação de segurança, uma das primeiras medidas foi implementar uma estrutura de segurança multinível chamada AIM, sigla de Access Isolation Mechanism. Ela acrescentava controle de acesso obrigatório, que podia complementar o controle de acesso discricionário já existente. O Projeto Guardian foi encerrado em 1976. A maior parte de suas alterações não foi incorporada ao Multics, mas alguns componentes deram origem a produtos da Honeywell. O Secure Front End Processor proposto no projeto, por exemplo, foi comercializado como SCOMP, sigla de Secure Communications Processor. Em 1985, o Departamento de Defesa dos Estados Unidos concedeu ao STOP 2.1 a classificação de segurança A1. O SCOMP e seu sistema operacional STOP deram origem ao XTS-200, ao XTS-300 e ao XTS-400.
A Honeywell manteve o desenvolvimento do sistema até 1985. Foram instalados cerca de 80 sistemas, a um custo de milhões de dólares cada, em universidades, empresas e órgãos governamentais. Universidades francesas tinham instalações do Multics no início da década de 1980. Depois que a Honeywell encerrou o suporte, os usuários migraram para outros sistemas, como o Unix. Em 1986, a empresa começou a transferir sua divisão de sistemas de informação, inclusive os direitos sobre o Multics, para uma empresa conjunta com a Bull e a NEC.
Em 1985, o Multics recebeu a certificação de segurança B2 com base nos Trusted Computer System Evaluation Criteria, ou TCSEC. A avaliação foi feita pelo National Computer Security Center, o NCSC, uma divisão da NSA. Foi o primeiro sistema operacional avaliado nesse nível.
De 1975 a 2000, o Multics foi distribuído pelo Groupe Bull na Europa e pela Bull HN Information Systems Inc. nos Estados Unidos. Esta última era a razão social da antiga Honeywell Information Systems Inc., que também se chamou Honeywell Bull Inc. Em 2006, a Bull SAS liberou o código-fonte das versões MR10.2, MR11.0, MR12.0, MR12.1, MR12.2, MR12.3, MR12.4 e MR12.5 sob uma licença de software livre.
A última instalação conhecida do Multics executado diretamente em hardware Honeywell foi desligada em 30 de outubro de 2000, no Departamento de Defesa Nacional do Canadá, em Halifax, na Nova Escócia.

Em 2006, a Bull HN entregou ao MIT o código-fonte da MR12.5, a última versão do período comercial do Multics, lançada em 1992. A maior parte do sistema está disponível como software livre, com exceção de alguns componentes opcionais, como o TCP/IP.
Em 2014, o Multics foi executado em hardware recente por meio de um emulador criado por Harry Reed e Charles Anthony, participantes da comunidade Multicians. A versão 1.0 do emulador foi disponibilizada em 2017. Ela vem acompanhada do Multics MR12.6f, que acrescenta recursos como a recuperação e a edição de comandos anteriores por meio do sistema de vídeo.
Em agosto de 2023, foi lançada a versão MR12.8, com correções e melhorias.


help e qedxOs programas e comandos a seguir executam tarefas comuns de computação na interface de linha de comando do Multics.
change_wdir, ou cwd, altera o diretório de trabalho.create_dir, ou cd, cria um diretório.copy, ou cp, copia arquivos.list, ou ls, lista arquivos e diretórios.print, ou pr, exibe o conteúdo de um arquivo de texto.print_wdir, ou pwd, exibe o diretório de trabalho.move, ou mv, move um arquivo ou diretório para outro diretório.rename, ou rn, renomeia um arquivo sem movê-lo.edm, um editor de linhas simples.emacs, o Multics Emacs.qedx, uma versão mais rápida do qed.teco.runoff, ou rf.mail, ou mlread_mail, ou rdmsend_mail, ou sdmgcos, ou gc, simulador que executa programas do GCOS.sort e merge, ordenação e intercalação de arquivos de texto e binários.A linguagem do shell do Multics permite usar "funções ativas", semelhantes a comandos, mas que retornam uma cadeia de caracteres. Para chamar uma função ativa, seu nome e seus argumentos são colocados entre colchetes, [ e ]. O valor retornado substitui a chamada da função no comando. Por exemplo, ao processar echo [working_dir], o sistema executa a função ativa working_dir. Ela retorna o caminho completo do diretório de trabalho, que é inserido no comando. O comando echo exibe então esse caminho.
Alguns programas podem ser usados como comandos ou como funções ativas. Quando executados como comandos, exibem o resultado. Quando usados como funções ativas, retornam o resultado como uma cadeia de caracteres.
Entre as funções ativas mais usadas estão as seguintes.
ceil retorna o menor inteiro maior ou igual ao argumento.floor retorna o maior inteiro menor ou igual ao argumento.home_dir, ou hd, retorna o diretório do usuário.ltrimrtrimtrunc retorna a parte inteira do argumento.working_dir, ou wd, retorna o diretório de trabalho.Peter H. Salus, autor de um livro sobre os primeiros anos do Unix, afirmou que, com o Multics, "tentaram criar um sistema operacional muito mais versátil e flexível, e ele fracassou miseravelmente". Antigos desenvolvedores, como Tom Van Vleck e John Gintell, contestaram essa avaliação e defenderam que o sistema alcançou seus objetivos, embora as vendas tenham ficado abaixo das expectativas. Recursos técnicos do Multics foram incorporados ao Unix e a outros sistemas operacionais.
O Multics recebeu críticas pelo tamanho e pela estrutura de seu núcleo. Em 1972, a parte do supervisor que permanecia na memória ocupava cerca de 30 quilopalavras de código de procedimentos, o equivalente a 135 KiB em palavras de 36 bits. Na configuração do MIT documentada naquele ano, dois processadores compartilhavam 384 quilopalavras de memória. Para uma carga de 55 usuários, o supervisor utilizava ainda cerca de 36 quilopalavras para dados e áreas de armazenamento temporário.
O sistema completo, com o sistema operacional, o compilador PL/I, os comandos de usuário e as bibliotecas de sub-rotinas, tinha cerca de 1.500 módulos de código-fonte. Cada módulo continha em média aproximadamente 200 linhas, e o conjunto compilado produzia cerca de um milhão de palavras de código de procedimentos, equivalentes a 4,5 MB em palavras de 36 bits. Era um volume grande para os padrões daquele período.
Os compiladores do Multics geralmente priorizam a compactação do código mais do que o desempenho da CPU. Por exemplo, usam pequenas sub-rotinas chamadas de operadores para sequências curtas e padronizadas de instruções. Isso reduz a utilidade de uma comparação direta entre o tamanho do código-objeto do Multics e o de sistemas mais recentes. A compactação do código era uma escolha adequada para um sistema multiusuário que dependia de memória principal cara.
Dick Hill, que foi gerente do programa Multics na Honeywell, avaliou que o sistema se ajustava mal ao negócio central de processamento de dados da Honeywell Information Systems. Em suas lembranças, a equipe de marketing dos Estados Unidos entendia pouco do Multics e não gostava do que conhecia, com exceção da divisão Federal Systems, que o comercializava com mais empenho.
O projeto e os recursos do Multics influenciaram o Unix, criado por dois programadores que haviam trabalhado no sistema, Ken Thompson e Dennis Ritchie. Essa relação está no sistema de arquivos hierárquico, no redirecionamento, no shell e nos nomes de alguns comandos. A concepção interna do Unix, porém, buscava manter o sistema pequeno e simples, corrigindo o que seus criadores viam como deficiências do Multics, que exigia muitos recursos de um hardware ainda limitado.
O próprio nome Unix, inicialmente Unics, é um trocadilho com Multics. Uma explicação atribui o U a uniplexed, em oposição a multiplexed, expressão da preferência dos criadores por uma solução mais simples e viável em computadores menores. Simson Garfinkel e Harold Abelson apresentam outra origem. Durante uma demonstração do protótipo nos Bell Labs, Peter Neumann teria sugerido o nome UNICS, pronunciado como a palavra inglesa eunuchs, que significa "eunucos", numa referência a um "Multics castrado". Um relato de Phil Karn, porém, afirma que Dennis Ritchie negou essa versão.
Em uma entrevista de 2007 a Peter Seibel, Thompson disse que o Multics tinha "projeto demais, construção demais e excesso de tudo. Era quase inutilizável. Eles [o MIT] ainda dizem que foi um sucesso monstruoso, mas claramente não foi". Sobre o que levou do Multics para o Unix, afirmou que "as coisas de que gostei o bastante para aproveitar foram o sistema de arquivos hierárquico e o shell, um processo separado que você pode substituir por outro".
Ritchie escreveu que a concepção do Unix também recebeu ideias do CTSS do MIT, antecessor imediato do Multics.
William Poduska, um dos fundadores da Prime Computer, chamava o sistema operacional PRIMOS da empresa de "Multics em uma caixa de sapatos". Poduska depois fundou a Apollo Computer. Seus sistemas AEGIS e Domain/OS, às vezes chamados de "Multics em uma caixa de fósforos", adaptaram o projeto do Multics a estações de trabalho gráficas conectadas em rede.
O Stratus VOS, da Stratus Computer, depois chamada de Stratus Technologies, tem uma interface de usuário e uma estrutura interna muito próximas das do Multics. Seus recursos de confiabilidade, disponibilidade e segurança foram ampliados no VOS para atender a uma linha de computadores com tolerância a falhas, destinados ao processamento de transações seguro e confiável. O Stratus VOS é o descendente mais direto do Multics ainda em desenvolvimento e em uso operacional.
O Multiple Console Time Sharing System, ou MCTS, desenvolvido pela General Motors para o computador STAR-100 da Control Data Corporation, foi baseado no Multics.
A arquitetura de proteção do Multics, que restringe o acesso de código de um nível do sistema aos recursos de outro, foi adotada como base dos mecanismos de segurança do VME, da International Computers Limited, ou ICL. O GEORGE 3 também recebeu ideias do Multics.
O Edinburgh Multiple Access System, ou EMAS, adotou sobretudo o armazenamento de nível único do Multics. Nesse sistema, os arquivos só podem ser acessados por mapeamento em memória, e todo o espaço de memória pertence a algum segmento.
O uso do serviço Multics, operado no sistema Honeywell 6180, diminuiu... uma queda de 15%.
... o encerramento de projetos Multics que não conseguiram financiamento.
Esses novos preços foram tão atraentes para muitas pessoas que o número de usuários e o uso do Multics aumentaram consideravelmente.
Desligamento do DND-H às 17h08 UTC de 30 de outubro de 2000.
Há bons argumentos para afirmar que o UNIX é, em essência, uma implementação moderna do sistema CTSS do MIT.
A bibliografia sobre o Multics abrange o sistema e seus componentes. Uma relação extensa está na página Multics Bibliography. Há também uma bibliografia de 1994, mais curta e em formato de texto. Entre as leituras de referência estão as obras a seguir.