Windows既然不開源,那程序員是怎麼為它開發支持軟件的?

linjiayan9103


其實windows是個黑盒,但是對外暴漏了一些接口,這些接口有對應的說明文檔,分別描述了接口的類型,接口的用途,接口各個參數的類型。有些文檔也會附上一些例子,為你展示怎麼使用,這樣就很好的解決了程序員為其開發應用的問題。

如下面幾張圖就是windows api的描述




春花般燦爛


Windows是微內核架構,各模塊之間由消息機制通訊,模塊之間藕合度相對較低,可以封裝成獨立的API接口給應用程序調用,而不必開源核心代碼。因為API返回錯誤,問題就在這個模塊上,不會牽扯到其它模塊,即使不開源也容易找到問題。

宏內核的Linux就不一樣了,模塊之間本身就是靠API調用,外層調用的API返回了錯誤,往往可能是上一層API返回的,那就要去分析它的源碼才能找得到問題。


光明右使8787


回答這個問題,我們先來一個程序員的靈魂拷問:程序的本質是什麼?

1. 程序的本質是什麼?

程序的本質,就是一坨二進制形態的指令和數據,它們與相關的硬件相互作用,實現預定的目標。至於二進制與硬件的關係和相互作用,詳情可以訂閱筆者的專欄《華為方舟編譯器源代碼分析》的相關文章。

2. 源代碼真的那麼重要嗎?

把你自己想象成計算機,那麼源代碼就是“火星語”——因為你只care二進制,其他的語言你聽不懂。之所以會有源代碼這個東西,其實主要是人類為了解決大規模生產效率而發明的東西。畢竟人類使用的語言是自然語言,直接用二進制來編寫程序,對普通人來說,是一個枯燥、低效、並且需要有完整的系統知識,才能勝任的工作。為了擺脫這種天生的短板,人類就開始想象:如果有一個東西,能把接近自然語言的程序翻譯成計算機能聽懂的二進制,不就好了嗎?這玩意就是“編譯器”。

最開始的編譯器是彙編器,它的作用是將彙編語言翻譯成二進制,彙編語言本質只是一堆助記符,每條彙編指令與二進制指令是一一對應的。有了第一個彙編器,人類就可以用匯編語言來開發更高級的編程語言的編譯器,這樣遞歸往復,就可以最終形成非常貼近人類自然語言的高級語言的編譯器(比方說C++和Java),這樣通過這個高級語言編譯器,就可以轉化成二進制,完美解決前面講到的計算機和人類分別說著各自不懂的語言的問題。具體的原理和介紹可以參見筆者的專欄《華為方舟編譯器源代碼分析》的文章《先有蛋還是先有雞:編譯器本身是怎麼被編譯出來的?》

從上面的介紹可以看出:高級語言編寫的源代碼只不過是為了人類的理解方便,而有的產物。對於真正的計算機高手,比方說黑客,只要有二進制,就可以反推出對應的設計思路和意圖。只不過,這個過程需要比較豐富的系統知識、技巧、耐心和靈感罷了。

3. 對於不開源的系統,如何進行開發和支持?

對於不開源的操作系統,有兩種方法進行開發和支持:

第一種方式:通常操作系統的開發商會提供一組API接口甚至框架,給到應用程序開發者。你可以把這些API和框架看做是樂高積木,應用程序開發者可以利用這些原材料,來進行組裝,生成功能更強大的產品,來吸引最終用戶買單。

比方說:我們常用的Office辦公軟件,本質就是應用程序,它實際上就是利用操作系統提供的顯示、繪圖、計算、應用程序間相互調用(COM)等API來構建出豐富的辦公程序,方便用戶使用。

第二種方式:逆向分析系統,找出可以“嫁接”的地方,將自己的程序插進去。這種方式就是典型的“黑客手法”。在沒有源代碼甚至對應API的情況下,對系統進行反彙編、反編譯,將二進制反向還原成高級語言,然後來理解對應的設計思想和意圖。在內存或者外存中找到關鍵的數據結構,對它進行改寫,這樣當系統調用到這些數據結構時,就會被“欺騙”,對應的邏輯被黑客所篡改,從而達到黑客所預設的目標。當然這種手法除了搞破壞之外,也可以被用來打系統補丁。

總之一句話:對於真正的高手而言:二進制面前,了無秘密!


周林ZhouLin


基於windows開發並不需要開源。API函數和應用框架就是開發人員與操作系統的協調,絕大部分底層工作是由編程軟件來做的,軟件開發人只是需要關注應用建模和人機界面等。

開源對軟件開發人員來說並沒有直接意義。操作系統得出現就是為了減少開發人員直接與硬件打交道,共享系統調用和服務,比如消息機制,從這個角度看,開源並沒有給開發人員帶來好處。

一個好的編譯系統才是開發人員最需要的,連大部分A P I都包裝起來,可以認為開發人員面對的是一個虛擬機。一個虛擬機由硬件 操作系統和編譯器組成。

比如要在屏幕上顯示 哈哈哈,在Delphi中寫 showmessage(“”哈哈哈”)。


散居獵人



首先弄明白計算機系統和軟件的關係

計算機系統軟件包含系統軟件和應用軟件,沒有裝任何軟件的計算機稱為裸機,裸機是很難被人們使用的,軟件是計算機系統必不可少的部分。系統軟件是直接運行在裸機上的系統軟件,又是其他軟件能夠運行的基礎,下圖表明計算機硬件、軟件之間的關係


操作系統的生態問題,造就了開發人員為其開發軟件

Windows桌面操作系統從85年發佈的Microsoft-DOS到現在的windows 10,有數據顯示,Windows仍然雄踞91.59%,其次是Mac佔6.27%,最後的Linux佔2.14%,在我國的使用率更是高達了95%。


為什麼在我國有如此高的比例呢,主要原因市場初期,微軟採取了縱容盜版的態度,讓我們人人都能免費使用,造就身邊很多人進行使用。除了這個原因,其系統本身簡單易用,很容易上手,不需要花太多的時間就會學會。還有一個重要的原因,微軟推出的office辦公軟件,在Windows中的使用體驗最好,我們日常工作生活中已經產生了一種依賴,習慣養成了,就自然很難擺脫windows系統了。


使用的人多了,其商業價值也越大,就好比使用微信的人多了,好多人和企業在上面做公眾號,頭條號和抖音火了,好多人在上面做自媒體的道理一樣,流量就是王道。windows的生態也是如此,因此很多公司和開發人員很樂意針對Windows系統開發軟件,不僅普通的C端用戶需要,不少企業和機關單位用的也是windows系統,需要大量的定製軟件,這個是剛需的需求,也造就了越來越多的公司投入到windows軟件的開發。


小節

今天的分享就和大家聊到這裡,由於我們已經對 windows產生了嚴重的依賴性,依賴性約束強,越是很難擺脫,如果哪一天微軟的 windows系統 不讓我們用了,對我們的影響是難以想象的,期待這我們有一天也能做出生態強大好用的操作系統。

感謝大家閱讀,如果你有什麼好的想法歡迎到留言區分享交流,如果你贊同我的回答,歡迎給個贊和轉發,謝謝支持。

前端達人


操作系統是否開源並不會影響基於該操作系統來打造相關的軟件產品,從技術體系結構的設計來看,只要操作系統開放了自己的API,就可以圍繞這個操作系統打造相應的生態體系。

從計算機軟硬件發展的歷史來看,操作系統的出現使得軟件和硬件形成了兩個大的發展方向,軟件關注於各種邏輯的設計和實現,而硬件則關注於如何完成具體的計算任務。軟件開發可以藉助於操作系統提供的API來完成對於硬件的各種操作,這在很大程度上提升了軟件開發的效率,而且軟件開發的穩定性也得到了一定程度的提升。

軟件開發除了需要操作系統的支撐之外,還需要開發語言、開發框架、第三方庫,以及各種編譯工具的支撐。雖然開發語言往往能夠適應各種操作系統,但是不同的開發場景往往需要採用不同的編程語言,比如嵌入式開發往往需要使用C語言,而大數據開發則可以選擇Java、Python等編程語言。

有了編程語言往往還需要一系列編程工具的支撐,包括擴展編程語言功能的開發框架、庫,以及各種編譯工具等。開發框架和庫是擴展編程語言編程能力比較常見的做法,其中開發框架往往會讓程序員更專注於業務邏輯的實現,而各種庫則能夠實現編程語言向更多的開發場景下覆蓋,比如Python語言就通過各種庫實現了編程邊界的拓展。

編程環境對於程序員的影響也比較大,比如在當前的雲計算時代,基於PaaS進行各種任務開發會在很大程度上降低開發難度,這也會促使程序員實現崗位升級。

我從事互聯網行業多年,目前也在帶計算機專業的研究生,主要的研究方向集中在大數據和人工智能領域,我會陸續寫一些關於互聯網技術方面的文章,感興趣的朋友可以關注我,相信一定會有所收穫。

如果有互聯網、大數據、人工智能等方面的問題,或者是考研方面的問題,都可以在評論區留言,或者私信我!


IT人劉俊明


電視機裡有成千上萬個元件,全部裝在機殼裡,看不到也可能不懂原理(不開源),但幾乎大家都會用,為什麼呢?因為電視機有按鍵,有遙控器(API接口)。不需要看裡面,能控制它就行。


杭州鴻旺電子


不是這個專業的就不要問這麼幼稚的問題


那一紮啤


程序把參數給windows,windows經過計算,把結果返回給程序,程序不需要考慮windows是怎麼計算的,只需要考慮這是不是想要的結果。


金名木皆


把win比喻成一輛車,你不知道車輛的內部構造是怎麼樣的,但是你知道怎麼操作就行了,你知道怎麼操作不就可以讓車帶著你去你想去的地方嗎


分享到:


相關文章: