白蘋果急救室 同文刊登...
本文為「Keeping Safari a secret」一文之翻譯,原作者為曾負責Safari與WebKit計劃的前Apple工程師Don Melton。
把Safari藏起來。Keeping Safari a secret.
我們在研發Safari的大部份時間裡,它一直假裝成Microsoft Internet Explorer。明確地說,是假裝成從1998年開始預裝在作業系統內的Internet Explorer for Mac。而在Safari正式公開前的六個月,它開始假裝成Mozilla瀏覽器。
為何我們會這樣做?同時,在Safari的代碼與行為與這些瀏覽器如此不同的情形下,我們是如何讓Safari偽裝成這些瀏覽器的?
我除了被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就會從它被隱藏的光芒中自豪地展現出它真正的樣子。
而在它正式發表之前,我每天就在緊張、失眠以及四處搜尋網路上的伺服器紀錄中度過。
via Keeping Safari a secret