- 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
- Pour télécharger le code, il faut accepter les conditions de licence
- La licence n’autorise que l’usage non commercial et ne donne pas le droit de publier une copie ailleurs sur le Web afin de la concéder de nouveau sous licence à des tiers
- Ressources associées :
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
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.
À 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...
Il n’y a pas beaucoup de gens qui possèdent ce genre de connaissances.
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 timeoutJe 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.
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.
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.
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.
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.
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.
Un article de 2013 sur Adobe Photoshop 1.x de 1990, donc.
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.
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.
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
https://www.imdb.com/title/tt19896784/?ref_=nv_sr_srsg_0_tt_...
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
Il me semble que Xerox a perdu un gros procès à ce sujet.
[1] Exemple : https://www.consumerreports.org/consumerist/15-product-trade...
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 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.
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
« 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
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-branchtous les commits datant de moins de 10 ans, puis les références vides après filtrage seraient abandonnées