4 points par GN⁺ 2024-05-16 | 1 commentaires | Partager sur WhatsApp
  • Photoshop, devenu l’outil emblématique de la retouche d’images numériques, est né en 1987 comme programme personnel, avant d’être distribué par Adobe et de s’imposer comme produit commercial en 1990
  • Le Computer History Museum a publié, avec l’autorisation d’Adobe Systems Inc., le code source de Photoshop 1.0.1 pour un usage non commercial
  • Le code publié comprend 179 fichiers, soit environ 128 000 lignes, principalement en Pascal et en assembleur 68000
  • La bibliothèque d’applications MacApp, sous licence Apple, est exclue de cette publication, et la redistribution comme l’usage commercial sont également soumis à restrictions
  • Grady Booch estime que le code initial révèle une conception bien structurée et les fondations que l’on retrouve encore dans Photoshop moderne

Les débuts de Photoshop et sa commercialisation

  • Thomas Knoll, alors doctorant à l’University of Michigan en vision par ordinateur, a écrit en 1987 un programme permettant d’afficher et de modifier des images numériques
  • John Knoll, qui travaillait chez Industrial Light & Magic, a vu l’intérêt de ce programme pour la retouche photo, mais l’objectif initial n’était pas d’en faire un produit
  • Son premier nom était Display ; à mesure que ses fonctionnalités se perfectionnaient, ils ont estimé à l’été 1988 qu’il pouvait devenir un produit commercial
  • Les deux frères l’ont renommé Photoshop, et le fabricant de scanners de diapositives Barneyscan a fourni environ 200 exemplaires de la version 0.87 en bundle sous le nom Barneyscan XP

Adobe et le lancement de Photoshop 1.0

  • Sur la recommandation du directeur artistique Russell Brown, Adobe a décidé d’acquérir une licence pour distribuer une version améliorée de Photoshop
  • L’accord a été finalisé en avril 1989, et Photoshop 1.0 a commencé à être livré début 1990
  • Au cours des dix années suivantes, Photoshop s’est vendu à plus de 3 millions d’exemplaires
  • « Photoshop » s’est si largement imposé que le dictionnaire en ligne Merriam-Webster l’emploie comme verbe signifiant modifier une image numérique avec Photoshop ou un autre logiciel de retouche d’images

Le code source publié de Photoshop 1.0.1

  • Le Computer History Museum a publié, avec l’autorisation d’Adobe Systems Inc., le code source de Photoshop 1.0.1, version de 1990, pour un usage non commercial
  • La majeure partie du code est incluse, mais la bibliothèque d’applications MacApp sous licence Apple en est exclue
  • Le dossier compressé contient 179 fichiers, composés d’environ 128 000 lignes de code
    • Environ 75 % en Pascal
    • Environ 15 % en assembleur Motorola 68000
    • Le reste correspond à divers types de données
  • Le premier Photoshop a été écrit principalement en Pascal pour l’Apple Macintosh, avec du code machine pour Motorola 68000 dans les parties où l’efficacité d’exécution était importante
  • Thomas Knoll a indiqué qu’il était le seul ingénieur sur la version 1, et qu’ils étaient deux ingénieurs sur la version 2
  • Thomas s’occupait du programme applicatif principal, tandis que John écrivait plusieurs plugins de traitement d’image

Téléchargement et conditions de licence

La structure du code vue par Grady Booch

  • Grady Booch compare l’expérience consistant à ouvrir le code source de Photoshop 1.0 à celle de Howard Carter ouvrant pour la première fois le tombeau de Toutânkhamon
  • Le code est décrit comme un système très bien structuré, avec une séparation cohérente entre interfaces et abstractions
  • Pour chaque combinaison interface/implémentation, on trouve généralement un type principal, et les décisions de conception qui composent les abstractions sont faciles à suivre
  • La cohérence des noms, la bonne séparation des méthodes et la simplicité des implémentations rendent la structure du système relativement facile à comprendre
  • Photoshop 1.0 révèle des structures fondamentales qui subsistent, sous une forme plus avancée, dans les implémentations modernes
    • Les tuiles et les filtres sont cités comme structures représentatives
    • Le code inclut une abstraction de mémoire virtuelle pour traiter des images bien plus grandes que le tampon d’affichage ou la mémoire principale
  • Photoshop 1.0 comptait un peu plus de 100 000 lignes, alors que les versions modernes dépassent 10 millions de lignes
  • À l’époque comme aujourd’hui, une grande partie du code concerne les entrées-sorties et les différents formats de fichiers que Photoshop doit gérer
  • Le code source de la version 1.0 contient très peu de commentaires, la plupart étant attachés à des fragments d’assembleur
  • Booch estime que le code est suffisamment lisible pour que le manque de commentaires ne pose pas problème, et que des commentaires auraient même pu être gênants
  • Le code conserve aussi des traces de l’époque
    • Code de traitement du logiciel de scanner Thunderscan d’Andy Herzfield
    • Prise en charge du format ancien de fichier graphique raster TARGA
    • Quelques références à Barneyscan

Fonctionnalités et limites de Photoshop 1.0

  • L’écran du premier Photoshop affichait les outils disponibles
  • Pour les pinceaux, il était possible de choisir non seulement la couleur, mais aussi la taille et la texture
  • Des outils de sélection sophistiqués et divers filtres d’image étaient proposés
  • L’une des lacunes importantes était l’absence de fonction permettant de diviser une image en plusieurs calques ; elle a été ajoutée dans la version 3 en 1994
  • La page des préférences permettait de personnaliser certaines fonctions
  • Les choix de polices, de tailles de police et de styles de police étaient limités
  • Le texte était saisi dans une boîte de dialogue, puis déplacé dans l’image

1 commentaires

 
GN⁺ 2024-05-16
Avis sur Hacker News
  • Dans les années 2000, en travaillant chez Adobe, j’ai essayé d’archiver le code source de Photoshop, Illustrator, PostScript et d’autres applications.
    Il restait une sauvegarde des disquettes Mac originales de Thomas Knoll ; j’ai donc récupéré un Mac Plus et transféré les fichiers vers un ordinateur portable avec un câble série et Kermit. La première version était la 0.54, datée du 6 juillet 1988.
    Les fichiers des disquettes étaient dans plusieurs anciens formats d’archives compressées, mais la plupart étaient lisibles, et tout le code trouvé a été conservé sur un serveur Perforce spécial.
    Malheureusement, la toute première sauvegarde d’Illustrator se trouvait sur un unique disque externe défectueux.

    • La personne responsable d’Illustrator était à Palo Alto et était facile d’accès.
      À l’époque, certains retours jugeaient les interactions de l’interface médiocres ; c’est difficile à évaluer aujourd’hui, mais FreeHand a rapidement gagné en popularité avant de disparaître par la suite.
  • Il existe un article qui explique très bien ce qu’il faudrait pour compiler l’application à partir de ce code source : http://basalgangster.macgui.com/RetroMacComputing/The_Long_V...

    • J’ai lu d’autres articles de ce site, et c’est impressionnant.
      Il n’y a pas beaucoup de gens qui possèdent ce genre de connaissances.
    • Je me demande s’il y a un problème quand on l’ajoute à un lecteur de flux.
      Le RSS fonctionne bien de mon côté, mais dans Miniflux j’obtiens : 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
  • Je me souviens être allé chez Adobe au milieu des années 90 pour un échange de code source.
    PhotoShop reposait sur MacApp, et Adobe avait une couche qui fonctionnait sous Windows.
    Nous avons échangé le moteur SQL sur lequel nous travaillions, et le code que j’ai rapporté contenait bien une partie de PhotoShop, mais pas énormément — surtout du code particulier de calcul d’espaces colorimétriques, que nous avons ignoré.
    J’aimerais parcourir les sources pour voir s’il reste des traces de MacApp.
    Tout a peut-être changé après le milieu des années 90.

    • L’idée d’un échange de code est géniale.
      Je n’ai pas souvent entendu parler de ce genre de cas ; je me demande s’il existe d’autres histoires d’échanges de code.
    • C’est effectivement explicitement indiqué comme exception : « All the code is here with the exception of the MacApp applications library that was licensed from Apple »
    • J’ai travaillé sur Photoshop pendant plusieurs années, et ce code est toujours là.
    • MacApp sous Windows, vraiment ?
      Bien sûr, c’était probablement le cas, mais c’était un logiciel assez lourd.
      Think Class Library a sauvé beaucoup de développeurs, et Greg Dow travaille peut-être encore chez Adobe.
      En y repensant, PowerPlant était encore meilleur que TCL : https://en.wikipedia.org/wiki/PowerPlant
  • C’est étonnant que l’expérience utilisateur soit encore globalement la même aujourd’hui.
    La vision des premiers ingénieurs était remarquable.
    Mais de nos jours, je m’agace à chaque ouverture de l’application, et le seul moment où elle m’a paru réactive sur desktop a été la courte période où le MacBook Pro M1 venait de sortir et où existait une bêta Silicon d’Adobe Photoshop.
    Cette époque est terminée, et c’est redevenu lent.

    • Je ne sais pas si vous l’avez utilisé au début des années 90, mais sur un Mac avec 4 Mo de RAM, annuler un flou gaussien prenait environ 5 à 10 minutes.
      La souffrance était réelle, et pour l’utiliser correctement à l’époque, mieux valait un SGI Indigo avec 96 Mo de RAM.
      À la fin des années 90, il tournait le mieux sur un 9500, et même là il fallait le gigaoctet complet de RAM.
    • Je me demande si c’est parce que l’expérience utilisateur est bonne, ou si c’est parce que tout changement provoquerait une révolte collective des utilisateurs et serait donc impossible.
    • Il suffit de revenir à une version plus ancienne.
      J’utilise encore une version crackée sortie vers 2022, la première à prendre en charge le M1, et elle est toujours aussi réactive qu’il y a deux ans.
    • The Messy Middle est un excellent livre sur la façon dont l’ancien CEO de BeHance a repensé les produits cloud d’Adobe, et sur la manière de s’y prendre.
      Scott Belsky est désormais investisseur, et il a raconté comment il a vendu BeHance et Adobe à l’économie de la location.
      Même si c’est un excellent livre, cela ressemble aussi beaucoup à un manuel de développement personnel pour cadres en voie de raréfaction.
      Cela dit, l’écosystème open source pour l’art et le travail sur l’image n’a jamais été aussi bon, mais en réalité c’est surtout parce que les outils professionnels, impossibles à suivre sans soutien communautaire, sont devenus si chers que tout le monde a été poussé dehors.
    • J’utilise encore une vieille licence CS6 ; l’application est réactive une fois ouverte, mais son lancement prend toujours du temps.
  • Un article de 2013 sur Adobe Photoshop 1.x de 1990, donc.

    • Environ la moitié de ce code tourne probablement encore en WASM sur photoshop.adobe.com
  • J’ai regardé le code source, mais j’aimerais pouvoir comprendre ce qui rend ce code beau et élégant.
    En apprenant Rust, j’ai eu une réflexion similaire : même pour un simple jeu Snake, il y a tellement de choix possibles pour structurer le code que ça devient délicat.
    En réfléchissant à la manière de créer des fonctions et une UI qui opèrent sur un « espace », j’ai pensé à Photoshop ou à 3ds Max ; tomber sur ce dépôt était vraiment une bonne chose, mais je n’arrive tout simplement pas à le comprendre.
    Du point de vue de l’apprentissage, c’est intéressant et j’aimerais améliorer mes compétences en design patterns ; si vous connaissez de bonnes ressources pour apprendre la structure du code, je suis preneur.

    • Je ne peux pas dire grand-chose sur ce code ni sur mon parcours personnel, mais honnêtement, je pense qu’il vaut mieux prendre du recul et regarder les principes.
      Autrefois, les abstractions, les design patterns et la structure m’ont beaucoup fait souffrir.
      Mais j’ai fini par comprendre qu’en travaillant avec du « vrai » code impératif, en oubliant les classes pendant un temps et en mettant tout le code dans le même fichier, le code commence à se structurer de lui-même.
      Ça ne veut pas dire que c’est la seule voie, mais j’ai le sentiment que l’orienté objet peut devenir un obstacle en nous noyant sous les options.
    • Ce code utilisait MacApp, l’un des premiers frameworks qui cherchaient à prendre en charge le code répétitif.
      La structure de base d’une application MacApp est celle d’un document, et le framework MacApp distribue les événements vers les handlers.
      Cela fait longtemps que je n’ai pas travaillé sur une application MacApp, mais c’est ainsi que je me souviens de sa structure de base.
      MacApp lui-même ne semble pas inclus, mais il est possible qu’il se trouve quelque part ; Adobe avait à un moment porté MacApp vers Windows pour éviter de tout réécrire.
      J’imagine qu’ils l’ont ensuite remplacé, à un moment donné, par leur propre couche d’abstraction.
  • John Knoll a été responsable des effets visuels des préquelles de Star Wars, puis a participé à Rogue One.
    Le documentaire sur les coulisses de la production des préquelles se regarde encore bien aujourd’hui : https://youtu.be/da8s9m4zEpo?si=5y5gHUMxztwVzMny

    • Il n’était pas le réalisateur de Rogue One, mais il y est crédité comme superviseur des effets visuels, producteur exécutif et pour l’histoire originale : https://www.imdb.com/title/tt3748528/reference/
    • J’ai beaucoup apprécié la série documentaire d’ILM en plusieurs épisodes Light & Magic sur Disney+.
      https://www.imdb.com/title/tt19896784/?ref_=nv_sr_srsg_0_tt_...
    • J’ai rencontré son père, qui était professeur émérite au département de génie nucléaire de l’University of Michigan.
      Il a écrit un manuel classique dans le domaine de la détection des rayonnements.
  • Il y a un passage disant qu’ils « n’auraient jamais imaginé ajouter un mot au dictionnaire » ; Adobe essaie de l’empêcher, car cela conduit à la généricisation de la marque.
    Ses règles d’usage des marques donnent des exemples comme : « Écrivez toujours la marque avec les majuscules correctes et utilisez-la sous sa forme appropriée. Exemple correct : The image was enhanced with Adobe® Photoshop® Elements software. Exemple incorrect : The image was photoshopped. »
    [1] : https://en.wikipedia.org/wiki/Generic_trademark
    [2] : https://www.adobe.com/legal/permissions/trademarks.html

    • À ce stade, il me semble assez clair qu’on est entré dans le territoire de la généricisation.
      Il me semble que Xerox a perdu un gros procès à ce sujet.
      [1] Exemple : https://www.consumerreports.org/consumerist/15-product-trade...
    • Je comprends cette pression, mais personne ne parlera comme ça.
    • J’ai photoshopped une image avec Gimp.
    • Velcro a essayé de faire la même chose de façon bien plus efficace.
      https://www.youtube.com/watch?v=rRi8LptvFZY
      À long terme, ça ne marchera sans doute pas non plus, mais maintenant je suis clairement conscient que Velcro est une marque.
    • Je me demande si la généricisation est vraiment un problème.
  • Je me souviens avoir vu Photoshop avant Adobe dans un hôpital à Ann Arbor.
    J’avais trouvé ça vraiment impressionnant.
    Pour ajouter un détail, la version de MacApp utilisée à l’époque était le framework d’applications Apple Pascal et il s’agissait presque certainement d’une bêta.
    Tom Knoll avait utilisé, comme base de l’éditeur de courbes, un algorithme de B-splines issu de code sur lequel il avait travaillé comme contractant dans notre entreprise.

    • Je me demande ce qu’ils en faisaient à l’hôpital.
  • Les entreprises qui publient le code source d’anciennes versions de leurs logiciels méritent d’être saluées
    J’espère que davantage d’entreprises feront de même à l’avenir
    Cela dit, je crains qu’une grande partie de ces codes sources ait disparu avec le temps et au fil de plusieurs acquisitions successives
    L’usage généralisé de la gestion de versions est aussi un phénomène relativement récent ; s’ils existent encore, il y a de fortes chances qu’ils se trouvent dans des sauvegardes sur bande quelconques, des disquettes ou des impressions rangées dans des classeurs

    • https://www.softwareheritage.org/
      « Nous collectons et préservons les logiciels sous forme de code source, car les logiciels contiennent notre savoir technique et scientifique, et l’humanité ne peut pas prendre le risque de le perdre
      Le logiciel est une part précieuse du patrimoine culturel
      Nous gérons tous les logiciels que nous collectons et les rendons accessibles
      Parce que seul le partage permet d’en garantir la préservation sur le très long terme »
      Fondé par mon ami Roberto Di Cosmo
    • Si une organisation comme l’Internet Archive proposait un service d’entiercement pour publication différée du code source logiciel, je pense que beaucoup d’entreprises l’utiliseraient
      Avec notamment un contrat juridique standard effectif sanctionnant les fuites anticipées
      Ce pourrait être un service assez automatisé et nécessitant peu d’intervention
      Une entreprise pourrait dupliquer son dépôt git vers un serveur privé géré par l’organisation de préservation, laquelle pourrait créer un dépôt public vide correspondant
      Ensuite, toutes les heures, un agent parcourrait le dépôt privé et ne synchroniserait vers le dépôt public que les commits dont la date remonte à plus de 10 ans
      Les références seraient synchronisées aussi, mais réécrites comme si l’on avait supprimé avec git filter-branch tous les commits datant de moins de 10 ans, puis les références vides après filtrage seraient abandonnées