Windows為何演變成現在的樣子:從開發者角度看歷代Windows的演進

· · Windows, Windows應用程式開發, 相容性, OS歷史, Win32, .NET, 資安

1. 前言

提到Windows的歷史,多半會以外觀上的變化來描述。

出現了開始功能表。 加入了Aero。 變成了開始畫面。 工作列的位置改變了。 角變圓了。

當然,這些也是Windows的歷史。

不過,從Windows應用程式開發者的角度來看,真正重大的變化並不只是畫面設計。更重要的其實是這些變化:

  • 作業系統的穩定性
  • 記憶體保護
  • 權限管理
  • 驅動程式模型
  • 32位元/64位元支援
  • 與COM、ActiveX、Win32 API的相容性
  • .NET Framework與.NET
  • UAC
  • Windows Update
  • 資安功能
  • 市集應用程式與桌面應用程式的共存
  • WSL
  • TPM、Secure Boot
  • 高DPI、多顯示器
  • 混合式CPU與省電控制

Windows並不是單純改變外觀而演進的作業系統,而是一款盡可能讓舊應用程式持續運作的同時,逐步提升穩定性、資安、效能與硬體相容性的作業系統。這正是Windows有趣、同時也令人頭痛的地方。

本文不打算把歷代Windows當作單純的年表來回顧,而是要從Windows應用程式開發者的角度,重新審視這些變化。

2. Windows的歷史,也是兩股脈絡匯流的歷史

要理解Windows的歷史,首先該掌握的是,Windows大致上存在兩股脈絡。

一股是在家用電腦上普及開來的Windows 95/98/Me脈絡。 另一股是意識到企業與商用用途而成長起來的Windows NT/2000脈絡。

這兩股脈絡,在Windows XP時大幅匯流。

MS-DOS / Windows 3.xWindows 95 / 98 / Me家用電腦・易用性・周邊設備Windows NT / 2000商用・穩定性・權限管理Windows XP家用與商用的整合Windows Vista / 7UAC・WDDM・資安強化Windows 8 / 8.1觸控・市集・雲端Windows 10持續更新・WSL・相容性與現代化Windows 11資安標準・現代硬體

若不了解這股脈絡,就會對Windows現在的樣貌感到有些難以理解。

為什麼舊的API還留著。 為什麼會有系統管理員權限的問題。 為什麼32位元應用程式現在還能執行。 為什麼直接寫入Program Files會出問題。 為什麼在驅動程式或周邊設備上會遇到困難。

這些與其說是單純的設計失誤,不如說是Windows長期背負現實中PC使用情境所留下的結果。

3. Windows 95/98:讓家用電腦普及化的時代

Windows 95是一款決定了現代Windows操作方式的作業系統。

開始功能表。 工作列。 最小化、最大化、關閉按鈕。 Plug and Play(隨插即用)。 網路功能。 連上網際網路的入口。

如今視為理所當然的操作方式,在這個時期已大致成形。

從開發者的角度來看,Windows 95/98的時代,是PC從「只有少數專業人士會用的機器」變成「家庭與職場中普通使用的工具」的時代。

安裝應用程式。 連接印表機。 用數據機連上網際網路。 從CD-ROM安裝軟體。 使用數位相機或USB裝置。

這類使用方式一口氣普及開來。

到了Windows 98,網際網路、USB、DVD、多媒體、家用網路等元素進一步強化。

不過,這個時代的Windows仍殘留著源自DOS的不穩定性。

某個應用程式牽連整個作業系統當機。 驅動程式品質不佳就會出現藍色畫面(BSOD)。 DLL版本不一致,導致其他應用程式壞掉。 重新開機就好了,這種莫名其妙的經驗法則到處通行。

對經歷過這個時代的人來說,Windows既方便,同時也帶著一點恐懼。

4. Windows Me:家用DOS系列Windows的最後掙扎

Windows Me是一款很難評價的作業系統。

一般常被說成是「不穩定的Windows」。 事實上,很多人對它並沒有太好的回憶。

不過,Windows Me也嘗試了一些新東西。

System Restore(系統還原)。 System File Protection(系統檔案保護)。 AutoUpdate(自動更新)。 數位媒體功能。 家用網路。

也就是說,現在Windows中理所當然的「壞了就還原」「保護重要檔案」「自動化更新」這樣的方向性,當時已經可以看到雛形。

只不過,就基礎而言,它仍是家用DOS系列Windows的最終形態。

功能上想導入現代化的元素。 但作業系統本身的基礎體力還不夠。

這中間的落差,我認為正是Windows Me之所以困難的原因。

從開發者的角度來看,Windows Me告訴我們一件事:「要承載新的體驗,必須改變作業系統本身的地基」。

而這個答案,就是與NT系列的整合。

5. Windows NT/2000:商用Windows的地基

在家用Windows之外,還存在著Windows NT系列的脈絡。

NT系列從一開始就強烈意識到商用用途。

穩定性。 記憶體保護。 權限管理。 服務(Services)。 網路。 企業內部管理。

這股脈絡的重要成果,就是Windows 2000。

Windows 2000在納入Windows 95/98所培養出的易用性的同時,把NT系列的穩定性與管理能力推到了前面。

對開發者而言重要的是,從這個時期開始,Windows逐漸從「當機也沒辦法的家用OS」,轉變為更強調「支撐業務運作的平台」這一性質。

以Windows服務(Service)常駐執行。 記錄到事件記錄檔(Event Log)。 考量使用者權限。 在網路網域中受到管理。 與共用資料夾、印表機協同運作。

這些現在在商用應用程式開發中理所當然的前提,正是在NT系列Windows的脈絡中逐步培養出來的。

6. Windows XP:家用與商用的整合

Windows XP在Windows的歷史中,是特別重要的一款作業系統。原因並不只是因為它受歡迎,而是因為家用Windows的脈絡,與商用Windows NT系列的脈絡,在此以實用的形式整合在一起。

透過Windows XP,家用電腦也能以NT系列的穩定性為前提,這是非常大的變化。

在此之前的家用Windows,應用程式或驅動程式一旦出狀況,很容易連帶讓整個作業系統變得不穩定。 XP之後,至少就基礎架構而言,能以更穩定的NT系列為前提。

另一方面,XP被使用了非常長的一段時間。這既是好事,也帶來了難題。正因為長期使用,企業系統、內部工具、ActiveX、COM元件、老舊周邊設備、業務專用軟體,大量承襲了XP時代的前提。

換句話說,XP既是現代Windows的原型,同時也是延續至今的舊有資產(legacy)的起點之一。

對Windows應用程式開發者而言,XP的教訓可以歸結為一句話。

作業系統被使用得越久,應用程式的前提也會殘留得越久。

這既是相容性的問題,也是業務持續性的問題。

7. Windows Vista:常被視為失敗,卻是重要的轉捩點

Windows Vista有時被說成是不受好評的作業系統。

太重。 警告太多。 驅動程式不合。 應用程式跑不動。 XP比較好用。

就當時的使用者體驗而言,這些評價確實有其理由。

不過,從Windows應用程式開發者的角度來看,Vista是一個重要的轉捩點。

特別重要的是以下這些:

  • UAC
  • WDDM
  • Aero/Desktop Window Manager
  • 新的驅動程式模型
  • 資安強化
  • 64位元環境的普及
  • 限制寫入Program Files與Windows資料夾
  • 應用程式資訊清單(Application Manifest)

Vista把「為了安全使用而產生的不便」帶進了Windows。

在那之前的Windows中,以系統管理員權限執行早已變得過於理所當然。 應用程式把設定檔寫在與執行檔相同的資料夾中。 隨意寫入登錄檔(Registry)的系統區域。 安裝程式本身、應用程式本體都以系統管理員權限為前提。

這類設計並不罕見。

Vista之後,這種做法變得難以行得通。

應用程式該把設定寫在哪裡? 每個使用者各自的資料要放在AppData嗎? 所有使用者共用的資料要放在ProgramData嗎? 需要系統管理員權限的處理,該在何處、如何向使用者說明?

如果不考慮這些,應用程式就無法再以Windows應用程式應有的方式規矩地運作。

從使用者角度來看,Vista或許帶來了麻煩。但長遠來看,這是Windows邁向現代資安模型過程中必經的一道門檻。

8. Windows 7:把Vista的地基實用化的作業系統

Windows 7被記憶為完成度非常高的一款Windows。

它把Vista導入的重大變化,整理成更輕量、更易用、更穩定的形式。

作為商用Windows也非常受歡迎,在Windows應用程式開發現場,長期被當作基準環境使用。

Windows 7的重點,與其說是「思維上的重大變革」,不如說是「實用上的完成度」。

它保留了Vista導入的UAC與WDDM等方向性,同時改善了使用者體驗。

對開發者而言,隨著Windows 7的普及,以Vista之後的設計為前提的應用程式開發,變得越來越現實可行。

例如,會採用這樣的思維方式:

  • 以標準使用者權限即可執行為前提
  • 把需要系統管理員權限的處理,拆到安裝程式或另一個處理程序中
  • 妥善區分設定檔的儲存位置
  • 逐步意識到高DPI與多顯示器
  • 具備讓32位元應用程式在64位元Windows上執行的前提
  • 確認驅動程式與周邊設備的相容性

可以說,Windows 7在Windows應用程式開發中,扮演了從「XP時代的作法」過渡到「Vista之後的作法」的現實橋樑。

9. Windows 8/8.1:急轉向觸控時代

Windows 8是一款相當大膽的作業系統。

開始畫面。 動態磚(Live Tiles)。 Windows市集(Windows Store)。 觸控操作。 超級按鈕(Charms)。 雲端整合。

這是一款不僅意識到PC,也強烈意識到平板電腦的Windows。

就方向性而言,我認為並沒有錯。

智慧型手機與平板電腦快速普及,PC也有必要納入觸控與市集應用程式的思維。

只不過,對傳統桌面使用者來說,變化來得太快。

開始功能表看起來消失了。 整個畫面會切換。 在以滑鼠與鍵盤為中心的商用電腦上,操作情境變化過大。

結果,Windows 8成了一款評價兩極的作業系統。

從開發者角度來看,Windows 8強化了「Windows上會有多種應用程式模型共存」這個現實。

傳統的Win32桌面應用程式。 .NET Framework應用程式。 WPF應用程式。 市集應用程式。 WinRT。 以觸控為前提的UI。

在同一個Windows上,開始並存多種不同的作法。

這既帶來了複雜難懂之處。 但同時,這也正是Windows的特色所在。

導入新事物。 但不會立刻拋棄舊事物。

這種態度,延續到了Windows 10之後。

10. Windows 10:作為服務的Windows

Windows 10最大的特徵,就是Windows從「每隔幾年就要換新的作業系統」,變成「持續更新的作業系統」。

Windows as a Service。 功能更新(Feature Update)。 累積更新(Cumulative Update)。 Windows Defender的強化。 Microsoft Edge。 WSL。 虛擬化相關功能。 與雲端的整合。

在Windows 10上,Windows本身持續更新變成了理所當然的前提。

這對使用者、對開發者而言,都是重大的變化。

過去,就像Windows XP、Windows 7那樣,可以長期以某個特定的OS版本作為基準。 但Windows 10之後,即便同樣是Windows 10,版本也各不相同。

1507、1511、1607、1703、1709、1809、1903、2004、21H2、22H2。

雖然不需要逐一意識到這些細微差異,但開發者必須抱持「Windows會持續更新」這個前提。

這也影響了測試的思維方式。

  • Windows Update之後是否會出問題
  • 資安功能強化是否會讓安裝程式卡住
  • 是否與防毒軟體衝突
  • 是否過度依賴.NET Framework或執行環境(Runtime)的特定狀態
  • 既有的周邊設備或驅動程式在最新Windows上是否仍能運作
  • 與WSL或虛擬化功能共存時是否有問題

Windows 10是一款在保持相容性的同時,致力於現代化這個極具Windows特色難題的作業系統。

11. Windows 11:資安標準與現代硬體的時代

Windows 11在外觀上也有所改變。

置中的工作列。 帶有圓角的UI。 新的開始功能表。 Snap Layouts。 新版Microsoft Store。

不過,從開發者角度來看,更重要的是資安標準與硬體前提的變化。

Windows 11把TPM 2.0、UEFI、Secure Boot、支援DirectX 12的GPU、WDDM 2.0驅動程式等列為系統需求。

這並非單純的淘汰門檻,而是為了讓作業系統的資安功能、可靠性、可更新性、以及現代硬體功能成為前提所做的判斷。

當然,對於仍在使用老舊電腦或老舊周邊設備的現場來說,這是個令人苦惱的問題。不過,若要讓Windows今後仍能持續作為安全的業務基礎平台,勢必要在某個時間點提高前提條件。

對開發者而言,Windows 11展示出這樣的時代特徵:

  • 以資安功能為前提
  • 以高DPI、多螢幕、觸控、觸控筆、語音輸入等為前提
  • 意識到GPU與顯示驅動程式的世代差異
  • 意識到像P核心/E核心那樣的混合式CPU
  • 考量省電設定與背景執行帶來的影響
  • 考量與雲端帳戶、管理原則之間的關係

Windows應用程式的效能與穩定性,已經不再只由程式碼決定。

作業系統版本、更新狀態、資安設定、電源設定、CPU組態、驅動程式、權限、周邊設備,這些都必須一併納入執行環境來看待。

12. 從開發者角度看Windows的演進

若從開發者角度大致整理歷代Windows,就會呈現如下表格。

時代 代表性Windows 作為作業系統的變化 對開發者的影響
家用電腦普及 Windows 95/98 開始功能表、工作列、Plug and Play、支援網際網路 安裝程式、DLL、周邊設備、網路支援變得重要
家用DOS系列的尾聲 Windows Me System Restore、AutoUpdate、數位媒體 看出承載新功能需要作業系統的基礎體力
商用基礎平台 Windows NT/2000 穩定性、權限管理、服務、網路管理 商用應用程式、常駐處理、事件記錄檔、權限設計變得重要
整合的成功 Windows XP 家用與商用的整合、NT系列的普及化 以XP為前提的大量商用資產隨之誕生
資安轉捩點 Windows Vista UAC、WDDM、驅動程式模型、64位元 以系統管理員權限為前提的設計難以再行得通
實用化 Windows 7 Vista的改善、穩定性、商用普及 Vista之後的作法在實務上落地生根
觸控與市集 Windows 8/8.1 開始畫面、市集應用程式、雲端整合 Win32與新應用程式模型的共存成為課題
持續更新 Windows 10 Windows as a Service、Defender強化、WSL 需要以OS持續更新為前提進行測試
現代硬體 Windows 11 TPM、Secure Boot、UI革新、現代CPU/GPU 需要涵蓋資安、電源、CPU、驅動程式的整體設計

從這張表可以看出,Windows並不是單純地「變新」。它在承接舊有相容性的同時,逐步應對新的安全性與新的硬體。

因此,在Windows應用程式開發中,光看最新的API是不夠的。

也許還殘留著舊的COM元件。 也許還留有使用ActiveX的業務流程。 也許需要32位元DLL。 也許印表機驅動程式或USB裝置比較老舊。 也許需要在沒有系統管理員權限的情況下使用。 也許Windows Update後行為會改變。

這就是Windows。

很麻煩。

但這份麻煩,同時也是Windows長期承擔現實業務的證明。

13. 在Windows應用程式開發中,了解歷史為何有幫助

了解Windows的歷史,實務上的看法會有所不同。

例如,當應用程式無法啟動時。

不能只簡單地說「這是bug」。

也許是32位元/64位元的問題。 也許缺少必要的.NET Framework。 也許缺少VC++執行時期(Runtime)。 也許COM登錄壞掉了。 也許是UAC導致寫入失敗。 也許被防毒軟體擋住了。 也許受到老舊印表機驅動程式的影響。 也許是高DPI造成畫面跑版。 也許是Windows Update前後的行為差異。 也許是省電設定讓效能無法發揮。

在Windows應用程式開發中,不能只看應用程式本身,還必須觀察整個執行環境。

這確實麻煩。但正因如此,打造能在實際現場穩定運作的軟體,才更有價值。

14. 實務上應該檢視的清單

在既有Windows應用程式的改版或新開發中,只要事先掌握以下這些觀點,就能安心不少。

  • 目標作業系統是Windows 10,還是Windows 11
  • 若是Windows 10,其支援、ESU、LTSC的處理狀況如何
  • 是32位元應用程式,還是64位元應用程式
  • 是否依賴32位元DLL或COM元件
  • 能否在沒有系統管理員權限的情況下進行一般操作
  • 是否把設定寫入Program Files
  • 使用者個別資料是否放在AppData、共用資料是否放在ProgramData
  • 是否已把需要UAC提升權限的處理獨立出來
  • 安裝程式、更新處理、卸載處理是否安全
  • .NET Framework、.NET、VC++執行時期等相依關係是否明確
  • 在高DPI、多顯示器、遠端桌面環境下畫面是否不會跑版
  • 印表機、USB裝置、序列埠通訊、相機等周邊設備是否存在相容性問題
  • 是否具備在Windows Update之後仍能確認運作情況的體制
  • 是否已確認與Windows Defender或第三方資安軟體之間的相容性
  • 是否考量到省電設定或CPU組態差異可能造成效能變化
  • 發生錯誤時是否留下記錄,並能從現場回收狀況資訊

這份清單不只是單純的開發技巧,而是Windows所累積下來的歷史本身。

15. Windows並非老舊,而是層層堆疊而成

Windows常被說成「老舊」。的確,它確實有老舊的部分。

有Win32 API。 有COM。 有登錄檔(Registry)。 有DLL的問題。 有老舊的控制項。 也有為了相容性而保留下來的行為。

不過,若只是把它單純視為老舊而捨棄,就無法看清Windows的本質。Windows是一款在承接舊事物的同時,不斷堆疊新事物的作業系統。與其說它是一座整理得井然有序的庭園,不如說它更像一座持續增建改建的巨大都市。

有新的大樓。 也有老舊的巷道。 地下埋著過去留下的管線。 也有便利的高速公路。 工廠、醫院、學校、政府機關,都在這座城市中運作著。

開發者,就是在這座城市中打造應用程式。

因此,只知道最新的道路是不夠的。 也需要稍微了解,那些老舊的道路為什麼還留著。

16. 總結

Windows的歷史,並不只是外觀上的歷史。它是一段在維持相容性的同時,如何逐步提升穩定性、資安、效能與硬體相容性的歷史。

Windows 95/98把PC推廣到了家庭與職場。 Windows NT/2000培養出了作為商用作業系統的穩定性與管理能力。 Windows XP把這兩者整合在一起。 Windows Vista成為資安與驅動程式模型上的重大轉捩點。 Windows 7讓這次轉變變得實用化。 Windows 8朝觸控與市集這個新方向邁出了一步。 Windows 10讓「持續更新的Windows」這個模式落地生根。 Windows 11則進一步推進了資安標準與現代硬體的支援。

Windows並不是一座整理得完美無瑕的理想鄉。它是一個龐大而複雜的平台,同時背負著現實業務、老舊資產、周邊設備、資安要求,以及新硬體,持續運作至今。

正因如此,在Windows應用程式開發中,不能只看「現在的Windows」,理解從過去延續至今的設計思維與相容性歷史,也十分重要。

不要輕率地捨棄老舊資產。 但也要應對新的安全性與執行環境。

在這樣的平衡之上,才有了現在的Windows。而在此基礎上打造出能確實運作的軟體,至今仍具有重大的價值。

參考資料

共用相同標籤的最新文章。能以相近的主題延伸理解。

與本文相近的主題頁面。以本文為起點,可進一步連到相關服務與其他文章。

本文連結到以下服務頁面,歡迎從最接近的入口查看。

常見問題

整理諮詢這個主題時常見的問題。

為什麼Windows XP在Windows的歷史上如此重要?
因為家用Windows(95/98/Me)的脈絡,與商用Windows NT/2000的脈絡,在XP時終於以實用的形式整合在一起。這使得家用電腦也能以NT系列的穩定性為前提。另一方面,XP被使用的時間非常長,因此企業系統、ActiveX、COM元件、老舊周邊設備等,大量承襲了XP時代的前提,這也成為延續至今的舊有資產(legacy)的起點之一。
Windows Vista是失敗之作嗎?
當時的使用者體驗確實有「太重」「警告太多」「驅動程式不合」等負評的理由,但從開發者角度來看,這是一個重要的轉捩點。UAC、WDDM、新的驅動程式模型、64位元環境的普及、限制寫入Program Files等機制被引入,使得以系統管理員權限為前提的應用程式設計方式難以再行得通。可以說,這是Windows邁向現代化資安模型過程中必經的一道門檻。
Windows 10對開發者來說改變了什麼?
最大的改變是,Windows從「每隔幾年就要換新的作業系統」變成「持續更新的作業系統」(Windows as a Service)。即便同樣是Windows 10,從1507到22H2版本也各不相同,因此長期以單一特定OS版本為基準的思維方式已不再適用。開發時需要在「Windows持續更新」的前提下進行測試,例如Windows Update之後是否會出問題、資安功能強化是否會讓安裝程式卡住等。
Windows 11的系統需求為什麼被提高了?
Windows 11將TPM 2.0、UEFI、Secure Boot、支援DirectX 12的GPU、WDDM 2.0驅動程式等列為必要條件。這並非單純淘汰老舊電腦,而是為了讓作業系統的資安功能、可靠性、可更新性、以及現代硬體功能成為前提所做的判斷。為了讓Windows今後仍能持續作為安全的業務基礎平台,勢必要在某個時間點提高前提條件。

作者檔案

本文作者的個人檔案頁面。

Go Komura

小村軟體有限公司 代表

以 Windows 軟體開發、技術諮詢與故障調查為中心,在難以重現的故障調查與既有資產仍在運作的專案上具有優勢。

回到部落格一覽