4 Punkte von GN⁺ 2024-05-16 | 1 Kommentare | Auf WhatsApp teilen
  • 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

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

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

    • Der Illustrator-Verantwortliche saß in Palo Alto und war gut erreichbar.
      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...

    • Nachdem ich weitere Beiträge auf dieser Site gelesen habe, bin ich beeindruckt.
      Es gibt nicht viele Leute mit solchem Wissen.
    • Ich frage mich, ob es beim Hinzufügen in einen Feedreader Probleme gibt.
      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 timeout
  • Ich 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.

    • Die Idee eines Code-Austauschs ist großartig.
      Von solchen Fällen habe ich kaum gehört; ich frage mich, ob es noch andere Geschichten über Code-Austausch gibt.
    • Tatsächlich ist es ausdrücklich als Ausnahme erwähnt: „All the code is here with the exception of the MacApp applications library that was licensed from Apple“
    • Ich habe viele Jahre an Photoshop gearbeitet, und dieser Code ist immer noch da.
    • MacApp unter Windows — wow.
      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.

    • Ich weiß nicht, ob du es Anfang der 90er benutzt hast, aber auf einem Mac mit 4 MB RAM dauerte das Rückgängigmachen eines Gaussian Blur etwa 5 bis 10 Minuten.
      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 frage mich, ob das daran liegt, dass die User Experience gut ist, oder ob Änderungen unmöglich sind, weil die Nutzer kollektiv auf die Barrikaden gehen würden.
    • Dann mach einfach ein Downgrade.
      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.
    • The Messy Middle ist ein hervorragendes Buch des früheren BeHance-CEO darüber, wie er Adobes Cloud-Produkte neu aufgebaut hat und wie man dabei vorgeht.
      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.
    • Ich nutze noch eine alte CS6-Lizenz; in der App selbst ist sie flott, aber beim Starten braucht sie immer noch Zeit.
  • Ein Artikel von 2013 über Adobe Photoshop 1.x aus dem Jahr 1990 — schon witzig.

    • Etwa die Hälfte dieses Codes läuft wahrscheinlich immer noch als WASM auf photoshop.adobe.com.
  • 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.

    • Über diesen Code oder meinen persönlichen Hintergrund kann ich nicht viel sagen, aber ehrlich gesagt halte ich es für sinnvoll, einen Schritt zurückzutreten und sich die Prinzipien anzusehen.
      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.
    • Dieser Code verwendete MacApp, eines der frühen Frameworks, die Boilerplate-Code übernehmen sollten.
      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

  • 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

    • Inzwischen scheint es ziemlich eindeutig im Bereich der Generisierung angekommen zu sein.
      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...
    • Ich verstehe diesen Druck, aber niemand wird so sprechen.
    • Ich habe ein Bild mit Gimp gephotoshoppt.
    • Velcro hat dasselbe viel effektiver versucht.
      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 frage mich, ob Generisierung wirklich ein Problem 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.

    • Ich frage mich, was sie im Krankenhaus damit gemacht haben.
  • 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

    • https://www.softwareheritage.org/
      „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
    • Ich denke, viele Unternehmen würden einen Escrow-Service für die verzögerte Veröffentlichung von Software-Quellcode nutzen, wenn eine Organisation wie das Internet Archive ihn anbieten würde
      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-branch alle Commits entfernt, die jünger als 10 Jahre sind; nach dem Filtern leere Referenzen würden verworfen