2013年に公開された Adobe Photoshop 1.0.1 のソースコード
(computerhistory.org)- デジタル画像編集の代表的ツールとなった Photoshop は、1987年の個人向けプログラムとして始まり、Adobe による配布を経て 1990 年に商用製品として定着した
- Computer History Museum は Adobe Systems Inc. の許可を受け、Photoshop 1.0.1 のソースコードを非商用目的で公開した
- 公開されたコードは 179 ファイル、約 128,000 行の規模で、Pascal と 68000 アセンブリ言語が大半を占める
- Apple からライセンスされた MacApp アプリケーションライブラリは公開対象から除外され、再配布や商用利用にも制限がある
- Grady Booch は初期コードについて、よく構造化された設計と現代の Photoshop につながる基本構造が見て取れると評価した
Photoshop の始まりと商用化
- Thomas Knoll は University of Michigan でコンピュータビジョンを研究していた博士課程の学生で、1987 年にデジタル画像を表示・修正するプログラムを書いた
- Industrial Light & Magic で働いていた John Knoll は、このプログラムが写真編集に有用だと考えたが、当初から製品化を意図していたわけではなかった
- 当初の名前は Display で、機能が徐々に洗練されるにつれて、1988 年夏には商用製品になり得ると判断した
- 兄弟は名前を Photoshop に変更し、スライドスキャナメーカーの Barneyscan はバージョン 0.87 を約 200 本、Barneyscan XP の名称でバンドル提供した
Adobe と Photoshop 1.0 の発売
- Adobe はアートディレクター Russell Brown の勧めを受け、Photoshop の改良版を配布するライセンスを購入することを決定した
- 契約は 1989 年 4 月に完了し、Photoshop 1.0 は 1990 年初頭から出荷された
- その後 10 年間で Photoshop は 300 万本以上を販売した
- 「Photoshop」は、Merriam-Webster オンライン辞典で Photoshop または他の画像編集ソフトウェアを使ってデジタル画像を変更することを意味する動詞として使われるほど広く普及した
公開された Photoshop 1.0.1 ソースコード
- Computer History Museum は Adobe Systems Inc. の許可を得て、1990 年版の Photoshop 1.0.1 ソースコードを非商用目的で公開した
- コードの大部分は含まれているが、Apple からライセンスされた MacApp アプリケーションライブラリは除外されている
- 圧縮フォルダには 179 ファイルがあり、約 128,000 行のコードで構成される
- 約 75% は Pascal
- 約 15% は Motorola 68000 アセンブリ言語
- 残りは各種データ
- 初期の Photoshop は Apple Macintosh 向けに主として Pascal で書かれ、実行効率が重要な部分では Motorola 68000 向けの機械語が使われた
- Thomas Knoll は、バージョン 1 では自分が唯一のエンジニアで、バージョン 2 ではエンジニアが 2 人だったと述べている
- Thomas は基本アプリケーションプログラムを担当し、John は複数の画像処理 プラグインを書いた
ダウンロードとライセンス条件
- コードをダウンロードするにはライセンス条件に同意する必要がある
- ライセンスは 非商用利用のみを許可し、Web 上の別の場所に複製を掲載して第三者に再ライセンスする権利は与えない
- 関連資料:
Grady Booch が見たコード構造
- Grady Booch は Photoshop 1.0 のソースコードを開く体験を、ツタンカーメンの墓を最初に開いた Howard Carter にたとえた
- コードは、インターフェースと抽象化が一貫して分離された、非常によく構造化されたシステムだと評価された
- 各インターフェースと実装の組み合わせごとに、おおむね 1 つの主要な型があり、抽象化をコンポーネント化した設計判断を追いやすい
- 一貫した名前付け、適切に分割されたメソッド、単純な実装のおかげで、システム構造を把握しやすい
- Photoshop 1.0 には、現代の実装にもさらに発展した形で残っている基本構造が見られる
- タイルとフィルタが代表的な構造として挙げられている
- ディスプレイバッファや主記憶よりはるかに大きい画像を扱うための仮想メモリ抽象化が含まれる
- Photoshop 1.0 は 10 万行を少し超える規模だったが、現代版は 1,000 万行以上に達する
- 当時も現在も、多くのコードは入出力と Photoshop が扱うさまざまな ファイル形式に関係している
- バージョン 1.0 のソースコードにはコメントがほとんどなく、その大半はアセンブリ言語の断片に付いている
- Booch は、コードが読みやすいためコメント不足は問題ではなく、むしろコメントが邪魔になった可能性もあると見ている
- コード内には当時の痕跡も残っている
- Andy Herzfield の Thunderscan スキャナソフトウェア処理コード
- 初期の TARGA ラスターグラフィックファイル形式のサポート
- Barneyscan へのいくつかの参照
Photoshop 1.0 の機能と限界
- 初期の Photoshop の画面には利用できるツールが表示されていた
- ブラシは色だけでなく、サイズとテクスチャも選択できた
- 高度な選択ツールと多様な画像フィルタが提供されていた
- 重要な欠落機能の 1 つは画像を複数の レイヤーに分ける機能で、この機能は 1994 年のバージョン 3 で追加された
- 環境設定ページでは一部の機能をカスタマイズできた
- フォント、フォントサイズ、フォントスタイルの選択肢は限られていた
- テキストはダイアログボックスに入力した後、画像内へ移す方式だった
1件のコメント
Hacker Newsの意見
2000年代にAdobeで働いていたとき、Photoshop、Illustrator、PostScript、その他のアプリのソースコード保管を試みたことがある
Thomas KnollのオリジナルのMacフロッピーバックアップが残っていたので、Mac Plusを持ってきて、シリアルケーブルとKermitでノートPCにファイルを移した。最初のバージョンは1988年7月6日付の0.54だった
フロッピー内のファイルは複数の古い圧縮アーカイブ形式だったが、ほとんどは読み取れた。見つけたすべてのコードを専用のPerforceサーバーに保管した
残念ながら、最初期のIllustratorバックアップは、故障した単一の外付けディスクドライブに入っていた
当時はインターフェースのインタラクションがいまひとつだというフィードバックがあった。今では判断しにくいが、FreeHandが急速に人気を得て、その後消えていった
このソースコードでアプリをビルドするには何が必要かをよく整理した記事がある: http://basalgangster.macgui.com/RetroMacComputing/The_Long_V...
こういう種類の知識を持っている人は多くない
RSSは自分の環境ではうまく動くが、Minifluxでは
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と出る90年代半ばにAdobeへソースコード交換に行ったことを覚えている
PhotoShopはMacAppベースで、AdobeにはWindowsで動作するレイヤーがあった
私たちは開発中だったSQLエンジンを交換し、持ち帰ったコードにはPhotoShopの一部が確かに入っていたが多くはなく、無視していた特殊な色空間計算コード程度だった
ソースを見て、MacAppの痕跡が残っているか確認してみたい
90年代半ば以降に全部変わっている可能性もある
こういう事例はあまり聞いたことがないので、ほかにコード交換の話があるのか気になる
もちろんそうだったのだろうが、かなり肥大化したソフトウェアだった
Think Class Libraryは多くの開発者を救ったし、Greg Dowは今もAdobeで働いているかもしれない
考えてみると、PowerPlantはTCLよりさらに良かった: https://en.wikipedia.org/wiki/PowerPlant
ユーザー体験が今でもおおむね同じであることに驚く
初期エンジニアたちのビジョンはすごかった
ただ最近はアプリを開くたびにいらいらするし、デスクトップでキビキビ感じられた唯一の時期は、MacBook Pro M1が最初に出てAdobe PhotoshopのSiliconベータがあった短い期間だけだった
その時代は終わり、また遅くなった
苦痛は本物で、当時まともに使うならRAM 96MBのSGI Indigoのほうが良かった
90年代後半には9500がいちばん相性がよく、そのときもRAM 1GB全部が必要だった
まだ2022年ごろに出た、初めてM1をサポートしたクラック版を使っているが、2年前と同じように今もキビキビしている
Scott Belskyは今では投資家になっており、BeHanceとAdobeをレンタル経済の方向へ売り渡した過程を書いている
優れた本だとはいえ、縮小していく経営層向けの自己啓発書に近いところもある
それでも、アートや画像制作向けのオープンソースエコシステムはこれまでになく良くなっている。実際には、コミュニティの支援なしには追いつけないプロ向けツールが高くなりすぎて、皆が押し出されたからでもある
2013年の記事で、1990年のAdobe Photoshop 1.xとは
ソースコードを見たが、何がそのコードを美しくエレガントにしているのか理解できるようになりたい
Rustを学びながら、単純なSnakeゲームでさえコード構造を決める際に選択肢が多すぎて難しいと感じ、似たような悩みを抱いた
「空間」上で動作する関数やUIをどう作るか考えているうちにPhotoshopや3ds Maxを思い浮かべ、このリポジトリを見つけられたのは本当に良かったが、単純に理解できない
学習の観点で興味深く、設計パターンの力を伸ばしたいので、コード構造を学ぶのに良い資料があれば教えてほしい
以前は抽象化、設計パターン、構造でかなり苦しんだ
だが「本物の」命令型コードで作業し、クラスのことをしばらく忘れ、すべてのコードを同じファイルに置くと、コードが自然に構造を持ち始めることに気づいた
これが唯一の道だという意味ではないが、オブジェクト指向は選択肢に埋もれさせ、妨げになることがあると感じる
MacAppアプリの基本構造はドキュメントで、MacAppフレームワークがイベントをハンドラーにディスパッチする
MacAppアプリに取り組んでから長い時間が経っているが、基本構造はそうだったと記憶している
MacApp自体は含まれていないようだが、どこかには存在する可能性があり、Adobeはかつてすべてを書き直さずに済むようMacAppをWindowsへ移植していた
その後どこかの時点で、自社の抽象化レイヤーに置き換えたのだと思う
John KnollはStar Warsプリクエルの視覚効果責任者で、その後Rogue Oneにも関わった
プリクエルの制作舞台裏ドキュメンタリーは今見ても悪くない: https://youtu.be/da8s9m4zEpo?si=5y5gHUMxztwVzMny
https://www.imdb.com/title/tt19896784/?ref_=nv_sr_srsg_0_tt_...
放射線検出分野の古典的な教科書を書いた人物である
「辞書に単語を1つ追加することになるとは想像もしなかっただろう」という部分があるが、Adobeはこれが商標の普通名称化につながるため阻止しようとしている
商標ガイドラインには「常に大文字で表記し、正しい形で商標を使用すること。正しい例: The image was enhanced with Adobe® Photoshop® Elements software. 誤った例: The image was photoshopped.」といった例がある
[1]: https://en.wikipedia.org/wiki/Generic_trademark
[2]: https://www.adobe.com/legal/permissions/trademarks.html
Xeroxもそれに関連して大きな訴訟で負けたと記憶している
[1] 例: https://www.consumerreports.org/consumerist/15-product-trade...
https://www.youtube.com/watch?v=rRi8LptvFZY
長期的にはそれでもうまくいかないだろうが、今ではVelcroが商標名だという点は確実に意識するようになった
Adobe以前のPhotoshopをAnn Arborの病院で見た記憶がある
本当にすごいと思った
ひとつ付け加えると、当時使っていたMacAppのバージョンはApple Pascalのアプリフレームワークで、ほぼ間違いなくベータ版だった
Tom Knollは、契約者として私たちの会社で作業していたコードのうち、Bスプラインアルゴリズムを曲線エディタの基盤として使っていた
古いバージョンのソフトウェアのソースコードを公開する企業は称賛されるべき
今後、より多くの企業がそうしてくれることを期待したい
ただし、こうしたソースコードのかなりの部分は、時間の経過や何度にもわたる買収の過程で失われてしまったのではないかと心配している
バージョン管理が広く使われるようになったのも比較的最近のことなので、残っているとしても、任意のテープバックアップ、フロッピーディスク、バインダーの中の印刷物にある可能性が高い
「私たちは、ソフトウェアが私たちの技術的・科学的知識を含んでおり、人類がそれを失うリスクを負うことはできないため、ソースコードという形のソフトウェアを収集し保存しています
ソフトウェアは文化遺産の貴重な一部です
私たちは収集したすべてのソフトウェアを管理し、アクセス可能にします
共有してこそ、非常に長い期間にわたる保存を保証できるからです」
友人のRoberto Di Cosmoが設立した
早期流出を罰する実質的な標準の法的契約も含めての話だ
かなり自動化され、手間の少ないサービスになり得る
企業がgitリポジトリを保存組織の管理する非公開サーバーにミラーリングし、保存組織は対応する空の公開リポジトリを作成できる
その後、1時間ごとにエージェントが非公開リポジトリを巡回し、コミット時刻が10年より古いコミットだけを公開リポジトリへ同期する
参照も一緒に同期するが、
git filter-branchで10年以内のコミットをすべて削除したかのように書き換え、フィルタリング後に空になった参照は捨てればよい