Código-fonte do Adobe Photoshop 1.0.1 divulgado em 2013
(computerhistory.org)- O Photoshop, que se tornou a principal ferramenta de edição de imagens digitais, começou como um programa pessoal em 1987 e, após ser distribuído pela Adobe, consolidou-se como produto comercial em 1990
- O Computer History Museum divulgou o código-fonte do Photoshop 1.0.1 para uso não comercial, com autorização da Adobe Systems Inc.
- O código publicado tem 179 arquivos e cerca de 128.000 linhas, compostas principalmente por Pascal e assembly 68000
- A biblioteca de aplicações MacApp, licenciada da Apple, ficou fora da divulgação, e também há restrições à redistribuição e ao uso comercial
- Grady Booch avaliou que, no código inicial, é possível ver um design bem estruturado e a estrutura básica que levaria ao Photoshop moderno
O início do Photoshop e sua comercialização
- Thomas Knoll era doutorando na University of Michigan, onde pesquisava visão computacional, e em 1987 escreveu um programa para exibir e modificar imagens digitais
- John Knoll, que trabalhava na Industrial Light & Magic, viu que o programa seria útil para edição de fotos, mas desde o início não havia a intenção de transformá-lo em produto
- O primeiro nome era Display e, à medida que os recursos ficaram mais sofisticados, no verão de 1988 eles concluíram que ele poderia se tornar um produto comercial
- Os dois irmãos mudaram o nome para Photoshop, e a fabricante de scanners de slides Barneyscan distribuiu cerca de 200 cópias da versão 0.87 em bundle com o nome Barneyscan XP
Adobe e o lançamento do Photoshop 1.0
- A Adobe, por recomendação do diretor de arte Russell Brown, decidiu comprar uma licença para distribuir uma versão aprimorada do Photoshop
- O acordo foi concluído em abril de 1989, e o Photoshop 1.0 começou a ser enviado no início de 1990
- Ao longo dos 10 anos seguintes, o Photoshop vendeu mais de 3 milhões de cópias
- “Photoshop” se espalhou tanto que passou a ser usado no dicionário online Merriam-Webster como verbo para alterar uma imagem digital com o Photoshop ou outro software de edição de imagens
O código-fonte publicado do Photoshop 1.0.1
- O Computer History Museum divulgou o código-fonte do Photoshop 1.0.1, versão de 1990, para uso não comercial, com autorização da Adobe Systems Inc.
- A maior parte do código foi incluída, mas a biblioteca de aplicações MacApp, licenciada da Apple, foi excluída
- A pasta compactada contém 179 arquivos, formados por cerca de 128.000 linhas de código
- Cerca de 75% em Pascal
- Cerca de 15% em assembly Motorola 68000
- O restante em vários tipos de dados
- O Photoshop inicial foi escrito principalmente em Pascal para o Apple Macintosh, e código de máquina para Motorola 68000 foi usado nas partes em que a eficiência de execução era importante
- Thomas Knoll afirmou que, na versão 1, ele era o único engenheiro e, na versão 2, havia dois engenheiros
- Thomas ficou responsável pelo programa principal da aplicação, enquanto John escreveu vários plugins de processamento de imagens
Download e condições da licença
- Para baixar o código, é necessário aceitar os termos da licença
- A licença permite apenas uso não comercial e não concede o direito de publicar cópias em outros lugares da web para relicenciá-las a terceiros
- Materiais relacionados:
A estrutura do código vista por Grady Booch
- Grady Booch comparou a experiência de abrir o código-fonte do Photoshop 1.0 à de Howard Carter ao abrir pela primeira vez a tumba de Tutancâmon
- O código foi avaliado como um sistema muito bem estruturado, com interfaces e abstrações separadas de forma consistente
- Para cada combinação de interface e implementação, em geral há um tipo principal, e é fácil acompanhar as decisões de design que componentizaram as abstrações
- Nomes consistentes, métodos bem divididos e implementações simples tornam relativamente fácil entender a estrutura do sistema
- No Photoshop 1.0, é possível ver estruturas básicas que permanecem, em formas mais evoluídas, também na implementação moderna
- Tiles e filters são citados como estruturas representativas
- Ele inclui uma abstração de memória virtual para lidar com imagens muito maiores do que o buffer de exibição ou a memória principal
- O Photoshop 1.0 tinha pouco mais de 100 mil linhas, enquanto as versões modernas têm mais de 10 milhões de linhas
- Tanto naquela época quanto hoje, muito do código está relacionado a entrada e saída e aos diversos formatos de arquivo que o Photoshop precisa processar
- O código-fonte da versão 1.0 quase não contém comentários, e a maioria deles aparece em trechos de assembly
- Booch considera que a falta de comentários não é um problema, pois o código é fácil de ler, e que os comentários talvez até pudessem atrapalhar
- O código também preserva vestígios da época
- Código para processar o software do scanner Thunderscan, de Andy Herzfield
- Suporte ao formato inicial de arquivo gráfico raster TARGA
- Algumas referências à Barneyscan
Recursos e limitações do Photoshop 1.0
- A tela inicial do Photoshop mostrava as ferramentas disponíveis
- O pincel permitia escolher não só a cor, mas também tamanho e textura
- Havia ferramentas de seleção sofisticadas e diversos filtros de imagem
- Uma ausência importante era o recurso de dividir a imagem em várias camadas, que foi adicionado na versão 3, em 1994
- Na página de preferências, era possível personalizar alguns recursos
- As opções de fonte, tamanho de fonte e estilo de fonte eram limitadas
- O texto era digitado em uma caixa de diálogo e depois movido para dentro da imagem
1 comentários
Opiniões no Hacker News
Nos anos 2000, enquanto trabalhava na Adobe, tentei fazer o arquivamento do código-fonte do Photoshop, Illustrator, PostScript e outros apps
Ainda existia um backup dos disquetes originais de Mac do Thomas Knoll, então peguei um Mac Plus e transferi os arquivos para um notebook com um cabo serial e Kermit; a primeira versão era a 0.54, de 6 de julho de 1988
Os arquivos nos disquetes estavam em vários formatos antigos de arquivos compactados, mas a maioria pôde ser lida, e guardei todo o código encontrado em um servidor Perforce especial
Infelizmente, o backup mais antigo do Illustrator estava em uma única unidade de disco externa com defeito
Na época havia feedback de que as interações da interface não eram muito boas e, embora hoje seja difícil julgar, o FreeHand rapidamente ganhou popularidade e depois desapareceu
Há um texto que organiza bem o que seria necessário para compilar o app a partir desse código-fonte: http://basalgangster.macgui.com/RetroMacComputing/The_Long_V...
Não há muita gente com esse tipo de conhecimento
O RSS funciona bem do meu lado, mas no Miniflux aparece
This website is too slow and the request timed out: Get "http://basalgangster.macgui.com/RetroMacComputing/The_Long_View/…;: dial tcp 209.182.219.107:80: i/o timeoutLembro de ter ido à Adobe em meados dos anos 90 para uma troca de código-fonte
O PhotoShop era baseado no MacApp, e a Adobe tinha uma camada que funcionava no Windows
Trocamos por um mecanismo SQL em desenvolvimento, e o código que levei para casa certamente incluía partes do PhotoShop, mas não muita coisa; era basicamente um código peculiar de cálculo de espaço de cores, que ignorei
Gostaria de examinar o código-fonte para ver se ainda há vestígios do MacApp
Tudo pode ter mudado desde meados dos anos 90
Não ouvi muitos casos assim, então fico curioso se há outras histórias de troca de código
Claro que devia ser assim, mas era um software bastante inchado
A Think Class Library salvou muitos desenvolvedores, e talvez Greg Dow ainda trabalhe na Adobe
Pensando bem, o PowerPlant era melhor que a TCL: https://en.wikipedia.org/wiki/PowerPlant
É surpreendente que a experiência do usuário ainda seja, em grande parte, a mesma
A visão dos engenheiros iniciais era impressionante
Mas hoje em dia fico irritado toda vez que abro o app, e a única vez em que ele pareceu ágil no desktop foi por um curto período, quando o MacBook Pro M1 foi lançado e havia a beta do Adobe Photoshop para Silicon
Esse tempo acabou, e ele voltou a ficar lento
O sofrimento era real, e na época, para usar direito, um SGI Indigo com 96 MB de RAM era melhor
No fim dos anos 90, ele se encaixava melhor em um 9500, e mesmo então precisava de 1 GB inteiro de RAM
Ainda uso uma versão crackeada de cerca de 2022, a primeira com suporte ao M1, e ela continua tão ágil quanto há 2 anos
Scott Belsky hoje virou investidor e escreveu sobre o processo de vender a BeHance e a Adobe para a economia de aluguel
Embora eu diga que é um ótimo livro, ele também parece mais um livro de autoajuda para executivos em declínio
Ainda assim, o ecossistema open source para arte e trabalho com imagens está melhor do que nunca, mas, na prática, isso aconteceu porque ferramentas profissionais que não acompanham sem apoio da comunidade ficaram caras demais e empurraram todo mundo para fora
Um texto de 2013 sobre o Adobe Photoshop 1.x de 1990
Vi o código-fonte, mas gostaria de conseguir entender o que torna esse código bonito e elegante
Ao aprender Rust, tive uma preocupação parecida ao perceber que até um simples jogo de Snake fica complicado porque há opções demais na hora de decidir a estrutura do código
Pensando em como criar funções e uma UI que operem sobre um “espaço”, lembrei de Photoshop e 3ds Max; foi muito bom encontrar este repositório, mas simplesmente não consigo entendê-lo
Do ponto de vista de aprendizado, acho interessante e quero melhorar minhas habilidades em padrões de projeto; se alguém souber de bons materiais para aprender estrutura de código, eu gostaria de saber
Antigamente eu sofria muito por causa de abstrações, padrões de projeto e estrutura
Mas, ao trabalhar com código imperativo “de verdade”, esquecer as classes por um tempo e colocar todo o código no mesmo arquivo, percebi que o código começa a ganhar estrutura por conta própria
Não estou dizendo que esse seja o único caminho, mas sinto que orientação a objetos pode atrapalhar ao soterrar você em opções
A estrutura básica de um app MacApp era um documento, e o framework MacApp despachava eventos para os handlers
Faz muito tempo que trabalhei em um app MacApp, mas lembro que a estrutura básica era essa
O MacApp em si não parece estar incluído, mas é possível que esteja em algum lugar; a Adobe chegou a portar o MacApp para Windows para não ter que reescrever tudo
Imagino que, em algum momento posterior, ele tenha sido substituído por uma camada de abstração própria
John Knoll foi responsável pelos efeitos visuais das prequels de Star Wars e depois participou de Rogue One
O documentário de bastidores da produção das prequels ainda vale a pena assistir hoje: https://youtu.be/da8s9m4zEpo?si=5y5gHUMxztwVzMny
https://www.imdb.com/title/tt19896784/?ref_=nv_sr_srsg_0_tt_...
Ele escreveu um livro-texto clássico na área de detecção de radiação
Há uma parte que diz “eles nunca imaginariam que acabariam acrescentando uma palavra ao dicionário”; a Adobe tenta impedir isso porque leva à genericização da marca
As diretrizes de marca têm exemplos como: “Sempre use a marca com inicial maiúscula e na forma correta. Exemplo correto: The image was enhanced with Adobe® Photoshop® Elements software. Exemplo incorreto: The image was photoshopped.”
[1]: https://en.wikipedia.org/wiki/Generic_trademark
[2]: https://www.adobe.com/legal/permissions/trademarks.html
Pelo que lembro, a Xerox também perdeu um grande processo relacionado a isso
[1] Exemplo: https://www.consumerreports.org/consumerist/15-product-trade...
https://www.youtube.com/watch?v=rRi8LptvFZY
No longo prazo, ainda assim não vai dar certo, mas agora estou definitivamente consciente de que Velcro é uma marca registrada
Lembro de ter visto o Photoshop antes da Adobe em um hospital em Ann Arbor
Achei realmente incrível
Para acrescentar uma coisa, a versão do MacApp usada na época era um framework de aplicações em Apple Pascal e quase certamente era beta
Tom Knoll usou um algoritmo de B-spline, de um código em que ele havia trabalhado como contratado na nossa empresa, como base para o editor de curvas
Empresas que abrem o código-fonte de versões antigas de seus softwares devem ser elogiadas
Espero que mais empresas façam isso no futuro
Só me preocupa que boa parte desse código-fonte possa ter se perdido com o tempo e ao longo de várias aquisições sucessivas
Como o uso amplo de controle de versão também é um fenômeno relativamente recente, mesmo que ainda exista, é bem provável que esteja em algum backup em fita aleatório, disquete ou impressão guardada em um fichário
“Coletamos e preservamos software na forma de código-fonte porque o software contém nosso conhecimento técnico e científico, e a humanidade não pode se dar ao luxo de correr o risco de perdê-lo
O software é uma parte preciosa do patrimônio cultural
Cuidamos de todo o software que coletamos e o tornamos acessível
Porque só compartilhando é possível garantir sua preservação por um período muito longo”
Foi fundado pelo meu amigo Roberto Di Cosmo
Incluindo um contrato jurídico padrão de verdade que penalizasse vazamentos antecipados
Poderia ser um serviço bastante automatizado e de baixa manutenção
A empresa espelharia seu repositório git em um servidor privado gerenciado pela organização de preservação, e a organização de preservação poderia criar um repositório público vazio correspondente
Depois, a cada hora, um agente percorreria o repositório privado e sincronizaria para o repositório público apenas os commits cujo horário de commit fosse de mais de 10 anos atrás
As referências também seriam sincronizadas, mas reescritas como se todos os commits com menos de 10 anos tivessem sido removidos com
git filter-branch, descartando as referências que ficassem vazias após a filtragem