4 pontos por GN⁺ 2024-05-16 | 1 comentários | Compartilhar no WhatsApp
  • 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

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

 
GN⁺ 2024-05-16
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

    • O responsável pelo Illustrator ficava em Palo Alto e era uma pessoa de fácil acesso
      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...

    • Fiquei surpreso ao ler outros textos desse site
      Não há muita gente com esse tipo de conhecimento
    • Fico me perguntando se há algum problema ao adicioná-lo a um leitor de feeds
      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 timeout
  • Lembro 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

    • A ideia de troca de código é legal
      Não ouvi muitos casos assim, então fico curioso se há outras histórias de troca de código
    • Na verdade, isso está explicitamente listado como exceção: “All the code is here with the exception of the MacApp applications library that was licensed from Apple”
    • Trabalhei no Photoshop por vários anos, e esse código ainda existe
    • MacApp no Windows
      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

    • Não sei se você usou no começo dos anos 90, mas em um Mac com 4 MB de RAM, desfazer um Gaussian Blur levava uns 5 a 10 minutos
      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
    • Fico me perguntando se isso acontece porque a experiência do usuário é boa ou porque, se mudarem, os usuários se revoltam em massa e torna-se impossível
    • É só fazer downgrade
      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
    • The Messy Middle é um ótimo livro escrito pelo ex-CEO da BeHance sobre como ele refez os produtos de nuvem da Adobe e como fazer isso
      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
    • Ainda uso uma licença antiga do CS6 e, dentro do app, ele é ágil, mas ainda demora para iniciar
  • Um texto de 2013 sobre o Adobe Photoshop 1.x de 1990

    • Tenho a impressão de que cerca de metade desse código ainda está rodando em WASM no photoshop.adobe.com
  • 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

    • Não posso falar muito sobre este código nem sobre meu histórico pessoal, mas, sinceramente, acho melhor dar um passo atrás e examinar os princípios
      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
    • Este código usava MacApp, que foi um dos primeiros frameworks a tentar cuidar do código repetitivo
      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

  • 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

    • A esta altura, parece bem claro que já entrou no território da genericização
      Pelo que lembro, a Xerox também perdeu um grande processo relacionado a isso
      [1] Exemplo: https://www.consumerreports.org/consumerist/15-product-trade...
    • Entendo essa pressão, mas ninguém vai falar assim
    • Fiz photoshopped em uma imagem com o Gimp
    • A Velcro também tem tentado fazer a mesma coisa, de um jeito muito mais eficaz
      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
    • Fico me perguntando se genericização é mesmo um problema
  • 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

    • Fico curioso sobre o que estavam fazendo com aquilo no hospital
  • 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

    • https://www.softwareheritage.org/
      “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
    • Acho que muitas empresas usariam um serviço de escrow para divulgação adiada de código-fonte de software se uma organização como o Internet Archive oferecesse isso
      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