# OpenStep

OpenStep é uma especificação de uma API orientada a objetos para um sistema operacional orientado a objetos que usa qualquer sistema operacional moderno como núcleo, principalmente desenvolvido pela NeXT. Note-se que OpenStep é uma especificação e OPENSTEP (tudo em maiúsculas) é uma implementação dessa especificação desenvolvida pela NeXT. Enquanto originalmente construído em um núcleo Unix baseado no Mach (como o núcleo do NEXTSTEP), versões do OPENSTEP estavam disponíveis para Solaris bem com para Windows NT. Além disso as bibliotecas OPENSTEP (as bibliotecas enviadas com o sistema operacional OPENSTEP) são de fato um superset das especificações OpenStep originais.

## Historia

A API OpenStep foi criada com resultado da colaboração em 1993 entre a NeXT e a Sun Microsystems, permitindo que essa versão reduzida do object layer do sistema operacional NEXTSTEP da NeXT rodasse no sistema operacional Solaris da Sun (mais especificamente, o Solaris num hardware baseado no SPARC). A maior parte do esforço OpenStep foi para separar esta porção do NEXTSTEP que dependia do Mach ou hardware especifico da NeXT estivesse presente. Isso resultou em um sistema pequeno que consistia primariamente de um Display PostScript, o runtime e o compilador Objective-C, e a maioria das bibliotecas Objective-C no NEXTSTEP. Não incluso era o sistema operacional básico, ou display system.
O primeiro rascunho da API foi publicado pela NeXT no verão de 1994. Mais tarde nesse ano seria lançado uma versão compliant com o OpenStep do seu sistema operacional flagship NEXTSTEP, rodando em vários de suas platformas suportadas e remarcado como OPENSTEP. Confusamente, a distribuição OPENSTEP deles roda também em hardware Sun SPARC, independente do Solaris. O OPENSTEP lembrado com o sistema operacional primário da NeXT produzido até ser comprada pela Apple Computer em 1997. O OPENSTEP foi então combinado com tecnologias do Mac OS existente para produzir o Mac OS X.
A Sun originalmente adotou o ambiente OpenStep com a intenção de complementar o Solaris NEO, sistema da Sun que era compatível com o CORBA (antes era chamado de Project DOE), ao prover um kit de ferramentas de interface ao usuário orientado a objetos para complementar o CORBA. A forma de portar envolvia integrar o OpenStep AppKit com a camada Display PostScript do servidor X11 da Sun, fazer o AppKit tolerante a código multi-thread (já que o Project DOE era inerentemente multi-thread), implementar um daemon Solaris para simular o comportamento da versão portada do núcleo Mach, estender o compilador SunPro C++ para suportar o Objective-C usando o runtime do ObjC da NeXT, escrever um gerenciador de janelas X11 para implementar a aparência do NEXTSTEP o máximo possível, e integrar as ferramentas de desenvolvimento da NeXT, tais como o Project Manager e o Interface Builder, com o compilador SunPro. Para prover um ambiente completo para o usuário final, a Sun também portou versões NEXTSTEP-3.3 de várias aplicações do usuário final, incluindo o Mail.app, Preview.app, Edit.app, Workspace Manager, e o dock.
O OpenStep e a CORBA foram depois divididos, e o NEO foi distribuído mais tarde em 1995 sem o ambiente OpenStep. Em Março de 1996 a Sun anunciou o JOE, um produto para integrar o NEO com a linguagem Java, a Sun enviou um beta do ambiente OpenStep para o Solaris em 22 de Julho de 1996, e o tornou disponível livremente para download em Agosto de 1996 para uso não comercial, e para vendas em setembro de 1996. O OpenStep/Solaris enviado para a arquitetura SPARC.

### Descrição

A API OpenStep contrasta com os NEXTSTEP anteriores primeiramente em cinco maneiras:
* A OpenStep descreve somente as bibliotecas e serviços de nível superior como o Display PostScript), visto que o NEXTSTEP refere-se a ambas como bibliotecas e o sistema operacional mesmo.
* Remoção de qualquer código dependente inteiramente do núcleo Mach, então esse OpenStep pode ser rodado sobre um sistema operacional razoavelmente poderoso.
* Uma significante quntidade de esforço foi colocada em tornar o sistema livre de Endianismo, um assunto que a NeXT já tinha encarado durante um port para a plataforma Intel.
* Objetos de baixo nível como strings foram representadas com tipos de dados em C no NEXTSTEP, enquanto no OpenStep um número de novas classes (NSString, NSNumber, etc.) foram introduzidas para suportar conversão de endianismo bem como prover funcionalidades e tornar independente da plataforma. Isso provocou alterações por toda a API, na maior parte para melhor. Esse conjunto de classes (um framework) foi chamado Foundation Kit, ou só Foundation para abreviação.
* O gerenciamneto de memória envolve de um simples mecânismo alloc/free a um novo paradigma retêm/libera: Se um pedaço de código pecisar manter um objeto válido, ele retêm ele, e quando não precisa mais, ele o libera.
A especificação da API por si mesma é composta de dois conjuntos principais de classes orientadas a objeto: a GUI e front-end gráfico conhecido como Application Kit, e o mencionado acima Foundation Kit.
Entretano, a OpenStep também especificava o uso do Display PostScript, um poderoso e versatil método baseado em PostScript de desenhar janelas e gráficos na tela. A NeXT com sua devoção a implementar soluções orintadas a objeto, fornecendo pswraps para interfacear código C para o Display PostScript. O pswraps atua em um módo encapsulado e de algum modo orientado a objeto. O Application Kit, o Foundation, e o Display PostScript as três tecnoligias chave na especificação OpenStep; entretanto, o Display PostScript era caracterizado nas tecnologias antigas da NeXT, como no NEXTSTEP.

### Construindo sobre o OpenStep

A padronização no OpenStep também permitiu a criação de vários dos novos pacotes de bibliotecas que foram entregues na plataforma OPENSTEP. Diferentemente do sistema operacional como um todo, esses pacotes foram projetados para executar stand-alone em praticamente qualquer sistema operacional. A ideia era usar o código OpenStep como uma base para aplicações em rede, executando em plataformas diferentes, ao invés de usar CORBA ou outro sistema.
O primário nesses pacotes era o Portable Distributed Objects (PDO). O PDO era essencialmente uma versão mais "crua" do OpenStep, contendo apenas as tecnologias da Foundation Kit, combinado com as novas bibliotecas para prover chamadas remotas com muito pouco código. Diferente do OpenStep, que definia um sistema operacional em que as aplicações executariam, sob o PDO as bibliotecas eram compiladas dentro da própria aplicação, criando uma aplicação stand-alone "nativa" para cada plataforma em particular. O PDO era pequeno o suficiente para ser facilmente portável, e foram lançadas versões para todos os principais fornecedores.
O PDO tornou-se um tanto infame em meados da década de 1990, quando a equipe da NeXT passou a escrever soluções para artigos de revistas CORBA, com algumas poucas linhas de código, enquanto o artigo original preenchia várias páginas. Embora o uso do PDO requeresse a instalação de uma quantidade considerável de código de suporte (Objective-C e as bibliotecas), as aplicações PDO eram, sem dúvida, consideravalmente menores que as soluções CORBA similares, tipicamente cerca de metade ou um terço do tamanho.
O similar D'OLE provia os mesmos tipos de serviços, mas apresentava os objetos resultantes como objetos DCOM, com o objetivo de permitir que os programadores criassem serviços DCOM executando em plataformas de alta potência, chamadas pelas aplicações do Microsoft Windows. Por exemplo, era possível desenvolver uma aplicação de modelagem financeira poderosa usando D'OLE, e então chamá-la diretamente de dentro do Microsoft Excel. Quando o D'OLE foi lançado, o OLE apenas servia para comunicação entre aplicações executando na mesma máquina. O PDO possibilitou a NeXT a demonstrar o Excel conversando com outras aplicações Microsoft através da rede antes de a própria Microsoft ser capaz de implementar essa funcionalidade.
Outro pacote desenvolvido no OpenStep foi o Enterprise Objects Framework (EOF), um produto tremendamente poderoso (para aquela época) de mapeamento objeto-relacional. O EOF tornou-se muito popular no mercado corporativo, especialmente no setor financeiro, onde a OPENSTEP causou uma pequena revolução.

## Implementações
### OPENSTEP/Mach

O primeiro sistema operacional da NeXT foi o NEXTSTEP, um sistema operacioal sofisticado baseado no Mach-UNIX que foi portado para rodar em várias arquiteturas (PA-RISC, SPARC, i386 e 68k). Entretanto, a nova política da NeXT para o NEXTSTEP foi liberar as bibliotecas do sistema operacional de ser atrelados ao UNIX e tornar-se mais independente de dispositivos.
A NeXT completou uma implementação do OpeStep em seu OS baseado no Mach e o chamaram de OPENSTEP/Mach. Esse foi, para todos os efeitos, o NEXTSTEP 4.0, e ainda reteve as tecnologias principais NEXTSTEP (tais como o DPS, suporte UNIX, características de interface com usuário como o Dock e Shelf, etc. O OPENSTEP/Mach foi melhorado posteriormente, em comparação com o NEXTSEP 3.3, com suporte a drivers muito melhorado - contudo o ambiente para realmente escrever os drivers foi alterado com a introdução do DriverKit orientado a objetos.
O OPENSTEP/Mach suportava arquiteturas Intel x86, SPARC e os próprios baseados na família Motorola 68k da NeXT, enquanto a versão PA-RISC da HP foi abandonada. Essas versões continuaram a rodar no OS baseado no Mach usado no NEXTSTEP. O OPENSTEP/Mach se tornou o OS principal da NeXT a partir de 1995, e era usado principalmente em plataforma Intel. Em adição a ser uma implementação completa do OpenStep, o sistema foi entregue com um conjunto completo de bibliotecas NEXTSTEP para manter a retro-compatibilidade. Isso foi algo fácil a fazer no OpenStep devido ao versionamento de bibliotecas, e o OPENSTEP não sofreu por causa disso.

### OPENSTEP Solaris

Em adição à versão portada do OPENSTEP/Mach para SPARC, a Sun e a NeXT desenvolveram um conjunto de frameworks compatível com OpenStep para rodar no sistema operacional Solaris. Depois de desenvolver o OPENSTEP Solaris, a Sun perdeu interesse no OpeStep, e desviou sua atenção para o Java. Como um ambiente de desenvolvimento de máquina virtual, o Java serviu como um competidor direto ao OpenStep.

### OPENSTEP Enterprise

A NeXT também entregou uma implementação rodando no Windows NT 4.0, chamada OPENSTEP Enterprise (geralmente abreviada como OSE). Essa foi uma demonstração não-intencional da verdadeira natureza da portabilidade de programas criados sob a especificação OpenStep. Programas para OPENSTEP/Mach podiam ser portados para o OSE com pouca dificuldade. Isso permitiu que sua base de usuários existente continuasse a usar suas ferramentas e aplicações, mas executá-las dentro do sistema Windows, para o qual muitos estavam em processo de migrar. Nunca foi um jogo muito limpo a partir da perspectiva de UI—provavelmente devido ao roteamento de gráficos de janela do OPENSETP através do servidor de Display Postscript, que também foi portado para Windows—o OSE, mesmo assim, conseguiu funcionar muito bem e permitiu ao OpenStep existir por talvez mais um ano.
O OPENSTEP e a OSE tiveram duas versões (e uma maior que nunca foi lançada) antes de a NeXT ser comprada pela Apple em 1997.

### Rhapsody, Mac OS X Server 1.0

Depois de comprar a NeXT, a Apple pretendia lançar o Rhapsody como uma versão retrabalhada do OPENSTEP/Mach tanto para o Mac quando para o PC padrão. O Rhapsody era um OPENSTEP/Mach com aparência do Copland do Mac OS 8 e suporte ao Java e tecnologias da Apple, incluindo ColorSync e QuickTime; poderia ser entendido como um OPENSTEP 5. Duas versões de Rhapsody foram lançadas, conhecidas como Developer Preview 1 e 2, e rodavam em hardware Intel e PowerPC, embora sem suporte para hardware padrão. O Mac OS X Server 1.0 foi a primeira versão comercial desse sistema operacional, e foi entregue esclusivamente para PowerPC Mac.

### Mac OS X 10.0

Depois de substituir o Display Postscript WindowServer com um baseado em PDF, e respondendo aos desenvolvedores incluindo melhor retrocompatibilidade para as aplicações Mac OS através da adição do Carbon, a Apple distribuiu o Mac OS X e o Mac OS X Server, começando na versão 10.0.
O ambiente de programação principal do Mac OS X é essencialmente o OpenStep (com certas adições como listas de propriedades XML e classes URL para Conexão com a internet) com o port das ferramentas e bibliotecas de desenvolvimento para o Mac OS X, agora chamada Cocoa. Porém, o Mac OS X divergiu da especificação OpenStep ao ponto de ser mais proximo do NeXTSTEP como produto. O Mac OS X 10.0 pode ser considerado como o NeXTSTEP 5. O esquema de versionamento interno da Apple para o Darwin, o código open source do núcleo do SO e o kernel do Mac OS X seguem essa numeração.
O Mac OS X dês de então se tornou um Unix mais populares do mundo, apesar do Mac OS X não seguir mais o padrão OpenStep.

### GNUstep

O GNUstep, uma implementação software livre das bibliotecas NeXT, começou na época do NEXTSTEP, predating OPENSTEP. Enquanto o OPENSTEP e o OSE, foram comprados pela Apple, que efetivamente finalizou como o desenvolvimento comercial da implementação para outras plataformas, GNUstep é um projeto ongoing open source que pretende criar uma implementação free software das bibliotecas OPENSTEP.
As bibliotecas Foundation e AppKit são completas com exceção de poucas classes que são raramente usadas. GNUstep also features a fully functional development environment. GNUstep also features reimplementations of some of the newer innovations from Mac OS X's Cocoa framework, as well as its own extensions to the API.