Adobe 家族的軟體是如何做到跨平台代碼復用的?


Linus 曾經說過「Portability is for people who cannot write new programs.」 Adobe 的歷史充分說明了這一點。

Photoshop 最早是用 MacApp 寫的。MacApp 就是原來 Apple 的 OS classic 上的 C++ framework。後來 Windows 流行了,就有人把 MacApp 的代碼 refactor 一下,然後寫一個新的 Windows adapting layer。所以說跨平台沒什麼大不了的。

現在做 GUI,我們還是不太喜歡選 Qt 之類的方案。就拿 GPU 開發來說,用 OpenGL 還不如自己寫一套 DirectX / Metal 的封裝。而且就 OpenGL 那個破 API 你怎麼也得寫封裝。

另外現在不差錢的大公司還有一種模式可以做跨平台。公司自己的 team 只做一個平台(比如 Mac 或者 iOS),由資深的工程師保證 model-view 的劃分。然後把整個代碼交給一個比較便宜的 contractor 或者 off-board RND 去做其它平台。這種模式下,其它平台的 feature 可以比主要平台的慢一個版本,但是好處就是幾乎不佔用公司自己 team 的時間(抽出一個 tech lead 5% 的時間回答一些問題就行)。你看跨平台就是這麼簡單,只要你的代碼在一個平台上完美運行,不用太擔心在其它平台上的表現。


Adobe在PostScript、Illustrator等早期項目上積累了豐富的C++跨平台、跨編譯器移植經驗。

GUI庫以前均為自創,現在已經部分改用Qt了。基礎類庫、繪圖函數、列印驅動、色彩空間、字體引擎等等都盡量自創一套,並不那麼依賴Mac或Windows的系統庫。

不過值得一提的是在Mac OSX更換到Intel平台時未能跟上蘋果公司的節奏(從Carbon升級到Cocoa),導致Photoshop CS4的64位版本僅來得及支持Windows。


何止跨平台復用,連註冊機都能復用


推薦閱讀:

為什麼Adobe沒有被微軟打敗?
Adobe家族各個軟體的功能都是什麼?
中國有沒有類似 Adobe、Autodesk 這種大型的軟體公司?如果沒有,是什麼原因造成的呢,技術、資金、創新?
如何評價 Adobe 聯合 Google 發布的「思源宋體」?
哪裡有 Adobe InDesign 的入門教程?

TAG:Adobe | 軟體工程 | 跨平台應用 |