The Joel on Software Translation Project:先生可以賞我一個連結程式嗎?

From The Joel on Software Translation Project

Jump to: navigation, search

先生可以賞我一個連結程式嗎?

作者:周思博 (Joel Spolsky)
譯:Paul May 梅普華
Wednesday, January 28, 2004
屬於Joel on Software, http://www.joelonsoftware.com

原因不明,不過微軟最先進又很出色的.NET開發環境少了一個重要的工具...一個約1950年起在軟體開發環境裡就很普遍的工具,這個工具是理當所然應該有的,真奇怪竟然沒人注意到.NET真的沒有。

少了的工具是什麼?就是連結程式啦。連結程式做的事如下,它會把你的程式編譯過的版本,和所有有用到的程式庫函數編譯過的版本結合起來。然後會把你沒用到的所有程式庫函數都拿掉。最後再產生大家可以在自己電腦上執行的單一可執行二位元程式。

.NET用了一個叫"runtime"的想法來取代連結程式。這是一大團22 MB並會動態連結的程式碼,每個人在用.NET應用程式之前電腦上都得先有這東西才行。

Runtime是個和DLL很像的問題,因為版本1的應用程式在設計上是要配合版本1的runtime,而等版本2的runtime出來,版本1的應用程式突然間就會原因不明地不太正常,這時候你麻煩就大了。舉例來說我們把runtime由1.0升級到1.1之後,現在公司的控制面板會把銷售數字取成小數點後4位的數字。通常不相容的狀況要比這更糟。

事實上.NET包含了一個叫"manifests"的大型技術系統,這個系統顯然很複雜,本來的用意是要確保各個應用程式只會用到正確的runtime,不過我認識的人沒有一個知道要怎麼用。

這衍生了一個故事。在Fog Creek的新年除夕宴會上,我們要讓主要房間裡的很多電腦螢幕在午夜前倒數。Michael用C#的WinForm寫了一隻程式,只用了60秒左右。真是個偉大的開發環境。

我的工作是把countdown.exe拷到三台電腦上執行。聽起來很簡單。

才怪。在執行檔上連按兩下就看到一個荒謬又神秘的錯誤訊息,說mscoree.dll還是什麼東西有問題,然後就是沒有意義地傾印了我的路徑。一點也沒提到問題其實只是沒有安裝.NET runtime而已。還好我是個程式師,知道這一定就是問題。

你要怎麼安裝runtime呢?「最簡單」的方法是用Windows Update。不過Windows Update一定要我取得所有重大的更新後才能裝runtime。這很合理,對吧?「重大」更新裡面有兩個分別是Windows service pack和新版的Internet Explorer,這兩個都得重開機。

就這樣,為了要在這幾台機器執行這小小的.NET應用程式,我得下載大約70或80 MB(還好我們網路夠快)然後重開機三四次。而這還是在一家軟體公司裡!我知道這花的確實時間,因為我一開始下載就在大電視螢幕上放映上班一條蟲(Office Space),電影放完時也幾乎快裝完了。電影每播十分鐘左右我就得起來,到每台電腦前去按那些笨對話盒的確定按鈕。

這就我們自己用的程式來說已經夠令人沮喪的了。不過再想想我們的產品CityDesk。我們的使用者幾乎每個人都會在購買前下載一份免費試用版。下載檔案的大小約9 MB而且不需要任何其他東西。而這些使用者幾乎全部都還沒有.NET runtime。

如果我們要求我們的試用者(通常是小型組織或家庭用戶),只為了試用我們的應用程式,卻要經歷整部電影長的痛苦安裝過程,我想我們大概會損失95%的潛在客戶。這些人還不是客戶,只是期望的客戶,我實在無法承受只為了一個較好用的開發環境而放棄95%的期望客戶。

「不過,」人們會說:「有runtime的人數總會變多,最後人數夠多這個問題就不見啦。」

我也這麼認為,然後我瞭解到微軟每六到十二個月就會推出新版的runtime,於是逐漸增加的已安裝人數又跳回零。如果我得痛苦掙扎在三種runtime版本上測試我的應用程式,只為了多那1.2%有其中一個版本的客戶,那我還真該死啊。

我只想把所有用到的東西連結成單一個靜態的執行檔,不用先裝任何東西就能執行。我不在意執行檔是否會大一點。我要的只是我實際用到的函數、byte code直譯器和小小的執行時期程式。我不需要屬於runtime一部份的整個C#編譯器。我承諾CityDesk不會編譯到任何C#原始碼。我也不需要全部的22 MB,我要的最多只有五或六MB吧。

我知道有些公司擁有這種技術,不過沒有獲得微軟許可不能重新發送runtime裡的資料(如byte code直譯器)。所以微軟醒醒吧,給我們一些1950年代的連結程式技術吧,讓我可以製作單一個執行檔在Win 98及後續系統上執行,而且沒有其他外部關聯。否則.NET對消費者下載軟體來說有致命的缺陷。

這些網頁的內容為表達個人意見。
All contents Copyright © 1999-2006 by Joel Spolsky. All Rights Reserved.


Personal tools