l

2011年11月16日 星期三

What Netscape learned from cross-platform software development (1)

November 16 22:15~23:32


Teddy 在開發跨平台軟體這件事情應該不需要再多做解釋了,稍微瞄一下部落格內容就可以看到好幾篇和跨平台軟體開發相關的文章 。自從 Linux,iOS 與 cloud computing 愈來越流行之後,開發跨平台軟體的需求也變得越來越強。舉個例子,鄉民們應該都用過的 Dropbox,就有 Windows,Linux,Mac,iOS,Android 版的 client,是一個相當典型的跨平台軟體範例。


雖然開發跨平台軟體的需求越來愈強,但是 Teddy 覺的這方面的資料(論文,書籍,網路文章等)相對來講並不太多。之前 Teddy 寫過一篇『 無笑軟工:跨平台軟體開發的幾種技巧』,稍微整裡幾種開發與設計跨平台軟體的方法,今天稍微介紹一下前一陣子指導教授介紹 Teddy 看一篇論文:What Netscape learned from cross-platform software development, CACM, Volume 42 Issue 10, Oct. 1999(這個 pdf 檔是要錢的,但是用 google 找一下,可以找到一個 link 下載免費的 pdf 全文...不知道是誰放到網路上的...XD


2011 - 1999 =12,very good... 大家算術都很好,這是一篇 12 年前的論文,有點古老,可能比你的小孩年紀都還大,姑且以『考古』的心情來看一下這篇論文講些什麼。既然網路上可以下載到全文,Teddy 就以『大易輸入法』的精神直接講重點就好。


首先是背景介紹:

  • Netscape 在 1996 年瀏覽器佔有率高達 90%,但隨著微軟 IE 上市,1997 年尾 Netscape 市占率只剩不到 50%。
  • 和微軟相比,Netscape 最大的優勢是具備『跨平台設計與開發技術』。Netscape 的瀏覽器還有伺服器軟體(Web Server,LDAP Server, etc.)支援不同版本的 Windows 與 Unix, Mac。
  • 微軟的軟體雖然不能跨平台,但是微軟可以針對專屬平台對軟體加以最佳化。Netscape 軟體雖然可以跨平台,但是其執行效率相較於非跨平台的軟體是比較差的。
  • 為了維持競爭力,Netscape 必須要持續投資在跨平台軟體設計與開發技術上。
***

基本上有兩種跨平台軟體的開發方式:
  • 針對不同的平台從頭開發個別版本的軟體(基本上不同平台不共用程式碼)。
  • 軟體系統大部分的功能都採用 generic, cross-platform code 來開發(不同平台共用程式嗎碼),軟體中只有少部份與平台相依的程式碼。
Netscape 採用上述第二種方法來開發跨平台軟體。

***

接下來論文討論 Netscape 在跨平台軟體所遇到的挑戰:
  • 需要額外的時間與人力來設計抽象的,跨平台的程式碼。
  • 需要處理在系統中總是有一小部份的程式碼是無法跨平台的(總是會有若干與平台相依的程式碼)。
  • 跨平台測試與除錯(很花時間)。
結論就是,開發跨平台軟體需要更多的時間,而且系統的執行效率(performance)通常是會比較差(程式跑的比較慢)。這個問題基本上微軟在 1980 年代就遇到了,微軟在開發 Word for Windows 與 Word for Mac 時,採用一種與平台無關的 pseudo-code 格式,然後再將個 pseudo-code 編譯成 Windows 與 Mac 版。想當然耳,結果是大失敗。先不提程式執行速度的問題,有人會想在 Mac 上面看到類似 Windows 的程式介面嗎?這讓 Teddy 想到 Java 的 AWT....

後來當微軟開發 IE for Windows 與  IE for Mac 時,就採取之前提到的方法一:不共用程式碼,不同平台各自開發各自的版本。


***

Netscape 為了開發跨平台軟體,自己在公司內部開發了一個稱之為 Netscape Portable Runtime (NSPR) 的元件,讓上層的程式來使用。鄉民們可以把 NSPR 想像成一個作業系統抽象層,基本上提供了 file, print, socket I/O, threading...等等服務(對使用 NSPR 的上層 AP 而言 NSPR 是與平台獨立的抽象層,如果一定要打比方的話可想像成類似 JVM)。


***

NSPR 的確達到『節省開發人員時間(應該是說節省 coding 時間)』的目的,但是由於 NSPR 需要支援的平台實在是太多了,要開發與維護 NSPR 本身而言變得十分的困難。後來 1997 年早期 Java 語言出現,讓 Netscape 看到一絲希望。由於 Java 『天生』具備跨平台的能力,Netscape 假想如果能夠用 Java 來重寫所有的產品就可以避免掉之前所遇到的很多跨平台軟體開發的問題(真是太天真了...Teddy 知道鄉民們現在會這麼說...Teddy 約略在那個時期也上了 Java 『write once, run anywhere』的大當啊....大人,冤枉啊)。

由於 1997 年 Sun 的 JVM 還有很多限制,因此 Netscape 著手開發自己的 JVM,並準備用 Java/Javascript/HTML 重新開發一個 Java 版的 Navigator(Netscape 瀏覽器)。但是很快的,在1997 年晚期到 1998 年早期的時候, Netscape 的工程師就發現 Java, Javascript 還是太不成熟了,因此後來 Netscape 決定放棄這個 Java 版的 Navigator 的計畫。

簡單講,Java 雖然『天生是個跨平台的語言』,但是在當時由於缺少相關的工具(例如用來建立使用者介面的工具)以及『執行速度太慢(真的,當時 Java 給人的感覺就是....慢.......很多拍...啊...你說什麼...現在也是...XD)』,所以 Netscape 就放棄了在 client 端與 server 端使用 Java 的計畫。

***

差不多該睡了,今天先講到這裡,預知結果下回分曉。

***

友藏內心獨白:想到這句 Write once, run anywhere 到現在都還恨的牙癢癢的。

2 則留言:

  1. 他的意思是你寫一遍, 然後你就需要到處亂跑...

    回覆刪除
  2. To A Linux Blogger:

    啊,Teddy 怎麼沒想到...原來這個句子少了『主詞』。

    You write the program once, then you run anywhere.

    回覆刪除