Apple 的保密計畫——隱姓埋名的 Safari

我們在研發 Safari 的大部份時間裡,它一直假裝成微軟的 IE。明確地說,是假裝成從 1998 年開始預裝在作業系統內的 IE for Mac。而在正式公開前的六個月,它開始假裝成 Mozilla 瀏覽器。
評論
評論

本文作者為 kouko,職業:流量詐欺師,兼職 Blogger、UI Designer。Twitter ID:@kouko_d。本文 〈 Apple 的保密計畫 —— 隱姓埋名的 Safari。 〉 刊載於他的部落格「wa+er. 白蘋果急救室」。

本文為「Keeping Safari a secret」一文之翻譯,原作者為曾負責 Safari 與 WebKit 計劃的前 Apple 工程師 Don Melton。

我們在研發 Safari 的大部份時間裡,它一直假裝成 Microsoft Internet Explorer。明確地說,是假裝成從 1998 年開始預裝在作業系統內的 Internet Explorer for Mac。而在 Safari 正式公開前的六個月,它開始假裝成 Mozilla 瀏覽器。

為何我們會這樣做?同時,在 Safari 的程式碼與行為與這些瀏覽器如此不同的情形下,我們是如何讓 S afari 偽裝成這些瀏覽器的?

我除了被 Scott Forstall 指派建立一個團隊並打造瀏覽器之外,同時也要讓這該死的專案保密。順道一提,在建立原始開發團隊的時候,因為直到有人正式接下工作之前,我不能透露任何的工作內容,讓這整件事真是麻煩到爆了。這關係到你的管理能力,不過這又是另一段故事了。

總之,就是保密。我們並沒有像 Jony Ive 的設計團隊,或是幾年之後的 iPhone 團隊那樣的物理性封鎖。不過除非你真的知道要找誰,不然你在園區裡面是找不到我們的。就算找到了人,你也不會知道我們在幹嘛。除非你剛好抓到我們正在跑 Safari——不過我們通常都會先把辦公室門給關好。

再說,我也不擔心有人說出去。Forstall 當然信任我們,這也是之所以他是個好老板的眾多原因之一。我也信任我的團隊,要不然我壓根不會僱用他們。我們的團隊,以及 Apple 內部的 beta 測試人員也不會跑出去告密。雖然測試人員少的要命,不過也不能怪他們。

當時 Twitter 與 Facebook 也還不存在,Apple 裡也沒人蠢到會把工作內容寫在部落格上。所以,那我要擔心啥玩意?

伺服器紀錄 —— 這玩意把我嚇得要死。

當 Web 瀏覽器從 web server 讀取頁面的時候,瀏覽器會用使用者代理字串(user agent string)向 server 表明自己的身份,基本上就是名稱、版本、平台等訊息。同時瀏覽器也會將 IP 位址傳送給 server,好讓 server 知道該把頁面傳回去哪裡。這種溝通機制除了讓 Web 能夠運作之外,同時也可以讓 server 知道是誰在用哪個瀏覽器,還有使用者的位置。

說到這邊,大家應該聽得懂,對吧?不過接下來還有更多玩意⋯⋯

回到 1990 年左右,當時有某些超有遠見的 IT 人幫 Apple 搞了整個 Class A 的 IP 位址。沒錯,Apple 有 16,777,216 個固定 IP 位址。而且,由於全部的 IP 都屬於同一區——現在我們稱為一個「/8 block」—— 每個 IP 的開頭都是相同的數字。就 Apple 這個案例來看,這個數字是「17」。

IP 位址 17.149.160.49?這是 Apple。17.1.2.3?沒錯,就是 Apple。17.18.19.20?一樣,也是 Apple。17.253.254.255?媽的!還是 Apple。

我完蛋了。

雖然我們在專案運作的時候就像 CIA 的秘密行動,有忠誠宣誓還有其他所有的套路,不過當在 Apple 園區網路內使用 Safari 的時候,我們不能夠讓 Safari 當「Safari」自己。要不然某個路邊的 Web server 管理員可能會從記錄檔裡的使用者代理字串與 IP 位址資料中發現其中的關聯,於是 Steve Jobs 想在 2003 年 1 月 7 日的 Macworld 上揭開的驚喜就會這樣死在路邊。當然,很有可能我也會一起死在路邊。

所以,每當在 Apple 的時候,我們會用我的巧妙設計把 Safari 的使用者代理字串藏起來。之所以說是「我的」,是因為這些在 Safari 與 Webkit 裡的程式碼就是我親自設計,並且依然還在原始碼裡的玩意。感謝老天,我的工程團隊已經移除,或是重新改寫了所有我寫的其他玩意。我僱了很多不錯的人。

每當我們在 Apple 園區網路以外的地方,例如自己家的時候,我們會把 Safari 的使用者代理字串改回原本的樣子。我們必須要這樣做,以便進行完整的測試。這可以讓我們調整字串,以便與當時的網站保有最大的相容性。這也解釋了為何 Safari 的使用者代理字串有那麼多額外的資訊,例如 KHTML 的 Gecko,這個使用其他瀏覽器引擎的名字。

我們不能在正式推出 Safari 的時候禁用使用者代理字串,不過我們接下來做了個最棒的事 —— 在指定的日期讓它自動啟用。在十年前正式發表的那天,Safari 就會從它被隱藏的光芒中自豪地展現出它真正的樣子。

而在它正式發表之前,我每天就在緊張、失眠以及四處搜尋網路上的伺服器紀錄中度過。