Der 2013 veröffentlichte Quellcode von Adobe Photoshop 1.0.1
(computerhistory.org)- Photoshop, das zum führenden Werkzeug für die digitale Bildbearbeitung wurde, begann 1987 als persönliches Programm, wurde später über Adobe vertrieben und etablierte sich 1990 als kommerzielles Produkt
- Das Computer History Museum veröffentlichte mit Genehmigung von Adobe Systems Inc. den Quellcode von Photoshop 1.0.1 für nichtkommerzielle Zwecke
- Der veröffentlichte Code umfasst 179 Dateien mit rund 128.000 Zeilen und besteht größtenteils aus Pascal und 68000-Assembler
- Die von Apple lizenzierte MacApp Application Library ist von der Veröffentlichung ausgenommen; auch für Weiterverbreitung und kommerzielle Nutzung gelten Einschränkungen
- Grady Booch bewertet den frühen Code als gut strukturiertes Design, in dem sich bereits die Grundstruktur erkennen lässt, die bis zum modernen Photoshop weiterlebt
Die Anfänge von Photoshop und seine Kommerzialisierung
- Thomas Knoll schrieb 1987 als Doktorand an der University of Michigan, wo er Computer Vision erforschte, ein Programm zum Anzeigen und Bearbeiten digitaler Bilder
- John Knoll, der bei Industrial Light & Magic arbeitete, hielt dieses Programm für nützlich zur Fotobearbeitung, doch ursprünglich war nicht geplant, daraus ein Produkt zu machen
- Der ursprüngliche Name war Display; als die Funktionen immer ausgefeilter wurden, kamen die Brüder im Sommer 1988 zu dem Schluss, dass daraus ein kommerzielles Produkt werden könnte
- Die Brüder änderten den Namen in Photoshop, und der Diascanner-Hersteller Barneyscan bündelte etwa 200 Exemplare der Version 0.87 unter dem Namen Barneyscan XP
Adobe und die Veröffentlichung von Photoshop 1.0
- Adobe entschied sich auf Empfehlung des Art Directors Russell Brown, eine Lizenz zu erwerben, um eine verbesserte Version von Photoshop zu vertreiben
- Der Vertrag wurde im April 1989 abgeschlossen, und Photoshop 1.0 wurde ab Anfang 1990 ausgeliefert
- In den folgenden zehn Jahren verkaufte sich Photoshop mehr als 3 Millionen Mal
- „Photoshop“ verbreitete sich so weit, dass es im Merriam-Webster Online Dictionary als Verb verwendet wird, um das Verändern digitaler Bilder mit Photoshop oder anderer Bildbearbeitungssoftware zu bezeichnen
Der veröffentlichte Quellcode von Photoshop 1.0.1
- Das Computer History Museum veröffentlichte mit Genehmigung von Adobe Systems Inc. den Quellcode der Version Photoshop 1.0.1 von 1990 für nichtkommerzielle Zwecke
- Der Großteil des Codes ist enthalten, die von Apple lizenzierte MacApp Application Library jedoch nicht
- Das komprimierte Archiv enthält 179 Dateien mit etwa 128.000 Zeilen Code
- etwa 75 % sind Pascal
- etwa 15 % sind Motorola-68000-Assembler
- der Rest sind verschiedene Arten von Daten
- Das frühe Photoshop wurde für den Apple Macintosh hauptsächlich in Pascal geschrieben; für besonders laufzeitkritische Teile wurde Maschinensprache für den Motorola 68000 verwendet
- Thomas Knoll erklärte, dass er in Version 1 der einzige Ingenieur war und es in Version 2 zwei Ingenieure gab
- Thomas war für das grundlegende Anwendungsprogramm zuständig, John schrieb verschiedene Bildverarbeitungs-Plugins
Download und Lizenzbedingungen
- Um den Code herunterzuladen, muss man den Lizenzbedingungen zustimmen
- Die Lizenz erlaubt nur die nichtkommerzielle Nutzung und gewährt nicht das Recht, Kopien an anderer Stelle im Web zu veröffentlichen und an Dritte weiterzulizenzieren
- Zugehörige Materialien:
Die Code-Struktur aus Sicht von Grady Booch
- Grady Booch verglich das Öffnen des Quellcodes von Photoshop 1.0 mit Howard Carter, als dieser zum ersten Mal das Grab von Tutanchamun öffnete
- Der Code wird als sehr gut strukturiertes System bewertet, in dem Schnittstellen und Abstraktionen konsequent getrennt sind
- Für jede Kombination aus Schnittstelle und Implementierung gibt es im Wesentlichen einen zentralen Typ, und die Designentscheidungen zur Komponentisierung der Abstraktionen lassen sich leicht nachvollziehen
- Durch konsistente Benennungen, sinnvoll aufgeteilte Methoden und einfache Implementierungen ist die Systemstruktur relativ leicht zu erfassen
- In Photoshop 1.0 ist bereits eine Grundstruktur erkennbar, die in moderneren Implementierungen in weiterentwickelter Form erhalten blieb
- Tiles und Filter werden als typische Strukturbeispiele genannt
- Enthalten ist eine Virtual-Memory-Abstraktion für den Umgang mit Bildern, die deutlich größer sind als Display-Buffer oder Hauptspeicher
- Photoshop 1.0 umfasste etwas mehr als 100.000 Zeilen, moderne Versionen dagegen mehr als 10 Millionen Zeilen
- Sowohl damals als auch heute betrifft ein großer Teil des Codes Ein-/Ausgabe sowie die vielen Dateiformate, die Photoshop verarbeiten muss
- Im Quellcode der Version 1.0 gibt es fast keine Kommentare; die meisten finden sich an Assembler-Fragmenten
- Booch meint, dass der Code so gut lesbar sei, dass der Mangel an Kommentaren kein Problem sei und Kommentare eher störend gewesen wären
- Im Code finden sich auch Spuren der damaligen Zeit
- Verarbeitungscode für Andy Herzfields Thunderscan-Scanner-Software
- Unterstützung für das frühe TARGA-Rastergrafik-Dateiformat
- einige Verweise auf Barneyscan
Funktionen und Grenzen von Photoshop 1.0
- Auf dem frühen Photoshop-Bildschirm wurden die verfügbaren Werkzeuge angezeigt
- Bei Pinseln konnten nicht nur Farben, sondern auch Größe und Textur gewählt werden
- Es gab ausgefeilte Auswahlwerkzeuge und verschiedene Bildfilter
- Eine der wichtigsten fehlenden Funktionen war die Aufteilung eines Bildes in mehrere Ebenen; diese Funktion wurde 1994 in Version 3 hinzugefügt
- Auf der Einstellungsseite ließen sich einige Funktionen anpassen
- Die Auswahl an Schriftarten, Schriftgrößen und Schriftschnitten war begrenzt
- Text wurde in ein Dialogfeld eingegeben und anschließend in das Bild eingefügt
1 Kommentare
Hacker-News-Meinungen
Als ich in den 2000ern bei Adobe arbeitete, versuchte ich, den Quellcode von Photoshop, Illustrator, PostScript und anderen Apps zu archivieren.
Es gab noch Backups der ursprünglichen Mac-Disketten von Thomas Knoll, also holte ich einen Mac Plus und übertrug die Dateien per seriellem Kabel und Kermit auf einen Laptop; die erste Version war 0.54 vom 6. Juli 1988.
Die Dateien auf den Disketten lagen in mehreren alten komprimierten Archivformaten vor, ließen sich aber größtenteils lesen, und ich legte sämtlichen gefundenen Code auf einem speziellen Perforce-Server ab.
Leider befanden sich die frühesten Illustrator-Backups auf einem einzelnen defekten externen Laufwerk.
Damals gab es Feedback, dass die Interaktionen in der Oberfläche nicht besonders gut seien; heute ist das schwer zu beurteilen, aber FreeHand wurde schnell populär und verschwand später wieder.
Es gibt einen guten Artikel, der zusammenfasst, was nötig ist, um die App aus diesem Quellcode zu bauen: http://basalgangster.macgui.com/RetroMacComputing/The_Long_V...
Es gibt nicht viele Leute mit solchem Wissen.
RSS funktioniert bei mir, aber Miniflux meldet:
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 timeoutIch erinnere mich, dass ich Mitte der 90er zu Adobe fuhr, um einen Quellcode-Austausch zu machen.
PhotoShop basierte auf MacApp, und Adobe hatte eine Schicht, die unter Windows lief.
Wir tauschten unsere in Arbeit befindliche SQL-Engine; in dem Code, den ich mit nach Hause nahm, steckte definitiv ein Teil von PhotoShop, aber nicht viel — im Grunde nur etwas ungewöhnlicher Code für Farbraum-Berechnungen, den wir ignorierten.
Ich würde mir den Quellcode gern ansehen, um zu sehen, ob noch Spuren von MacApp übrig sind.
Seit Mitte der 90er könnte sich allerdings alles geändert haben.
Von solchen Fällen habe ich kaum gehört; ich frage mich, ob es noch andere Geschichten über Code-Austausch gibt.
Klar, das wird schon so gewesen sein, aber es war ziemlich aufgeblähte Software.
Die Think Class Library hat vielen Entwicklern das Leben gerettet, und Greg Dow arbeitet vielleicht immer noch bei Adobe.
Wenn ich darüber nachdenke, war PowerPlant besser als TCL: https://en.wikipedia.org/wiki/PowerPlant
Erstaunlich ist, dass die User Experience heute im Großen und Ganzen immer noch dieselbe ist.
Die Vision der frühen Ingenieure war beeindruckend.
Aber heutzutage bin ich jedes Mal genervt, wenn ich die App öffne; die einzige Zeit, in der sie sich auf dem Desktop wirklich flott anfühlte, war ein kurzer Zeitraum, als das MacBook Pro M1 gerade herauskam und es eine Silicon-Beta von Adobe Photoshop gab.
Diese Zeit ist vorbei, und es ist wieder langsam geworden.
Der Schmerz war real; wer es damals ernsthaft nutzen wollte, war mit einer SGI Indigo mit 96 MB RAM besser bedient.
Ende der 90er passte es am besten auf einem 9500er, und selbst dann brauchte man das gesamte 1 GB RAM.
Ich nutze noch eine gecrackte Version von etwa 2022, die als erste M1 unterstützte, und sie ist immer noch so flott wie vor zwei Jahren.
Scott Belsky ist inzwischen Investor und hat beschrieben, wie er BeHance und Adobe in Richtung Mietökonomie verkauft hat.
Es wird zwar als großartiges Buch bezeichnet, ist aber auch eher ein Selbsthilfebuch für eine schrumpfende Zahl von Führungskräften.
Trotzdem ist das Open-Source-Ökosystem für Kunst- und Bildbearbeitung heute besser denn je; in Wirklichkeit aber wurden alle herausgedrängt, weil professionelle Werkzeuge, die ohne Community-Unterstützung nicht mithalten können, viel zu teuer geworden sind.
Ein Artikel von 2013 über Adobe Photoshop 1.x aus dem Jahr 1990 — schon witzig.
Ich habe mir den Quellcode angesehen, aber ich wünschte, ich könnte verstehen, was diesen Code schön und elegant macht.
Beim Lernen von Rust hatte ich ähnliche Überlegungen: Selbst bei einem einfachen Snake-Spiel gibt es so viele Möglichkeiten, die Codestruktur festzulegen, dass es schwierig wirkt.
Als ich darüber nachdachte, wie man Funktionen und eine UI baut, die auf einem „Raum“ operieren, musste ich an Photoshop oder 3ds Max denken. Es war wirklich großartig, dieses Repository zu finden, aber ich verstehe es schlicht nicht.
Aus Lernperspektive ist das interessant, und ich möchte meine Fähigkeiten bei Design Patterns verbessern. Wenn jemand gute Ressourcen zum Lernen von Codestruktur kennt, wäre ich dankbar.
Früher habe ich sehr unter Abstraktionen, Design Patterns und Struktur gelitten.
Aber als ich mit „echtem“ imperativem Code arbeitete, Klassen eine Weile vergaß und den gesamten Code in dieselbe Datei legte, merkte ich, dass der Code anfängt, von selbst Struktur anzunehmen.
Das soll nicht heißen, dass dies der einzige Weg ist, aber ich habe das Gefühl, dass Objektorientierung einen in Möglichkeiten begräbt und dadurch hinderlich sein kann.
Die Grundstruktur einer MacApp-App ist ein Dokument, und das MacApp-Framework dispatcht Events an Handler.
Es ist lange her, dass ich an einer MacApp-App gearbeitet habe, aber so habe ich die Grundstruktur in Erinnerung.
MacApp selbst scheint nicht enthalten zu sein, könnte aber irgendwo zu finden sein, und Adobe portierte MacApp einst auf Windows, um nicht alles neu schreiben zu müssen.
Ich nehme an, dass es später irgendwann durch eine eigene Abstraktionsschicht ersetzt wurde.
John Knoll war Visual-Effects-Supervisor der Star-Wars-Prequels und arbeitete später an Rogue One mit.
Die Behind-the-Scenes-Dokumentation zur Produktion der Prequels ist auch heute noch sehenswert: https://youtu.be/da8s9m4zEpo?si=5y5gHUMxztwVzMny
https://www.imdb.com/title/tt19896784/?ref_=nv_sr_srsg_0_tt_...
Er hat ein klassisches Lehrbuch über Strahlungsdetektion geschrieben.
Es gibt die Stelle „Er hätte sich wohl nie vorstellen können, einmal ein Wort zum Wörterbuch hinzuzufügen“; Adobe versucht, das zu verhindern, weil es zur Generisierung einer Marke führt.
In den Markenrichtlinien stehen Beispiele wie: „Schreiben Sie Marken immer groß und verwenden Sie sie in der korrekten Form. Richtiges Beispiel: The image was enhanced with Adobe® Photoshop® Elements software. Falsches Beispiel: The image was photoshopped.“
[1]: https://en.wikipedia.org/wiki/Generic_trademark
[2]: https://www.adobe.com/legal/permissions/trademarks.html
Ich meine mich zu erinnern, dass Xerox in einer großen Klage dazu verloren hat.
[1] Beispiel: https://www.consumerreports.org/consumerist/15-product-trade...
https://www.youtube.com/watch?v=rRi8LptvFZY
Langfristig wird es wohl trotzdem nicht funktionieren, aber mir ist jetzt definitiv bewusst, dass Velcro ein Markenname ist.
Ich erinnere mich, Photoshop vor Adobe in einem Krankenhaus in Ann Arbor gesehen zu haben.
Ich fand es wirklich beeindruckend.
Ergänzend: Die damals verwendete MacApp-Version war ein Apple-Pascal-App-Framework und mit ziemlicher Sicherheit eine Beta.
Tom Knoll verwendete einen B-Spline-Algorithmus aus Code, an dem er als Auftragnehmer in unserer Firma gearbeitet hatte, als Grundlage für den Kurveneditor.
Unternehmen, die den Quellcode alter Softwareversionen veröffentlichen, verdienen Lob
Ich hoffe, dass künftig mehr Unternehmen das tun
Allerdings fürchte ich, dass viele dieser Quellcodes im Lauf der Zeit und durch mehrere aufeinanderfolgende Übernahmen verloren gegangen sind
Auch dass Versionsverwaltung breit genutzt wird, ist ein relativ junges Phänomen; selbst wenn noch etwas vorhanden ist, dürfte es eher auf irgendwelchen Tape-Backups, Disketten oder als Ausdrucke in Ordnern liegen
„Wir sammeln und bewahren Software in Form von Quellcode, weil Software unser technisches und wissenschaftliches Wissen enthält und die Menschheit es sich nicht leisten kann, sie zu verlieren
Software ist ein wertvoller Teil unseres Kulturerbes
Wir verwalten die gesamte von uns gesammelte Software und machen sie zugänglich
Denn nur durch Teilen kann ihre Bewahrung über sehr lange Zeiträume gewährleistet werden“
Gegründet von meinem Freund Roberto Di Cosmo
Einschließlich eines echten standardisierten Rechtsvertrags, der eine vorzeitige Veröffentlichung sanktioniert
Das könnte ein ziemlich automatisierter Service mit wenig manuellem Aufwand sein
Ein Unternehmen könnte sein git-Repository auf einen privaten Server spiegeln, der von der Bewahrungsorganisation betrieben wird, und die Bewahrungsorganisation könnte ein entsprechendes leeres öffentliches Repository anlegen
Danach würde ein Agent stündlich das private Repository durchgehen und nur Commits, deren Commit-Zeitpunkt mehr als 10 Jahre zurückliegt, in das öffentliche Repository synchronisieren
Referenzen würden ebenfalls synchronisiert, aber so umgeschrieben, als hätte man mit
git filter-branchalle Commits entfernt, die jünger als 10 Jahre sind; nach dem Filtern leere Referenzen würden verworfen