一個尺寸不適合所有人:為什麼軟體不能普遍相容

軟體在任何作業系統上都是一樣的,對嗎?錯了。它看起來可能相同,功能也相似,但在幕後卻不同。...

你剛剛下載了一個功能打包的更新到你最喜歡的開源應用程序。一切都很正常,你可以在其他設備上使用它——所以現在也是時候把它推廣到這些設備上了。

software-isnt-universal

只是你的新Linux筆記本電腦與Windows安裝包不兼容。你的安卓平板電腦怎麼樣?蘋果**?PS4?你為什麼不能把那軟件帶到你喜歡的地方去用呢?讓我們來探索一些不同的障礙,實現“買一次,跑一次”的夢想

軟件開發和操作系統架構

理解軟件為什麼不能跨操作系統工作需要一點(只是一點,我保證)關於軟件是如何**的知識。

軟件開發過程

在桌面、服務器和移動設備(即非web)的非常基本的軟件開發流程中,程序員將:

  1. 在一個或多個文件中鍵入一些代碼。
  2. 把代碼編譯成計算機可以執行的東西。
  3. 測試以確保程序按預期工作。
  4. 打包和分發/部署軟件。

software os compatibility dev process

我們在這裡所關心的是第一和第二步的結合。編譯軟件的過程,或者把它從代碼轉換成計算機能理解的1和0(機器語言)的過程是複雜的。我們不會詳細討論它,但是從高層次理解發生了什麼是有用的。

操作系統體系結構

需要理解的一個重要點是,操作系統不是一個單一的實體。相反,它是由軟件層組成的。

操作系統內核

操作系統的內核負責與計算機的硬件進行通信。軟件將其命令傳遞給內核,內核又向硬件發出命令(例如)從硬盤讀取文件,或在屏幕上繪製窗口。它基本上協調了硬件和各種軟件之間的所有信息(無論是存儲的數據、計算還是用戶輸入)。內核通過系統調用將所有這些功能提供給軟件。

software os compatibility kernel basics

每個操作系統的內核都會實現不同的系統調用,包括哪些系統調用可用、調用什麼或選擇什麼。因此,軟件需要考慮到它所針對的每個操作系統的內核所支持的系統調用。在Linux中用於向GPU發送數據的系統調用可能有不同的名稱、需要提供的信息列表,或者在Windows中兩者都有。這個確切的電話可能根本就不存在。

系統庫

在許多情況下,軟件不會直接調用內核。相反,它調用系統庫或基本函數的集合。庫的存在使得(例如)每一個將文件保存到硬盤的程序都不需要編寫函數。相反,它只是鏈接到系統庫並使用現有函數。GLibC library for Linux就是一個很好的例子,win32api中的.DLL文件或Mac的/System/library目錄的內容也是一個很好的例子。

software os compatibility system libraries

系統庫充當應用程序和內核之間的一種轉換器,用於執行例行任務。應用程序對這些庫進行函數調用,這些庫處理許多低級細節。為了方便起見,它們還可以對內核進行系統調用。正如您可能已經猜到的,這意味著這些庫是為特定的內核編寫的,因此不能跨具有不同內核的操作系統使用。

操作系統執行頭

通用軟件的最後一個障礙是操作系統可執行文件的格式。操作系統希望它運行的文件遵循特定的二進制文件格式。例如,在Linux和FreeBSD等操作系統上運行的可執行和可鏈接格式(ELF)文件必須以特定字節指定文件的某些屬性,如下圖所示。

software os compatibility elf header

顯示的應用程序二進制接口(ABI)特別重要。ABI是處理器、內核和系統庫中可用調用的組合,它類似於應用程序編程接口(API),因為它定義了兩個程序如何相互通信。但是API是程序員(人類)在源代碼中用來表示兩個軟件應該相互通信的東西。ABI實際上允許他們在軟件編譯和運行後這樣做。每個操作系統都實現一個特定的ABI,在同一操作系統的不同版本之間,ABI可能會改變,也可能不會改變。

一般來說,操作系統實現自己的ABI,這是由處理器類型、內核和任何標準系統庫的組合決定的。但有時一個操作系統會實現不止一個。例如,FreeBSD支持Linux二進制文件,因為它提供了一個Linux ABI作為FreeBSD內核(而不是Linux內核)的附加組件。這與VMWare或VirtualBox等virtualizatiton程序不同,後者使用軟件模擬整個機器(硬件和所有)。因此,這種類型的ABI兼容性更快,但維護起來更費勁。這就是為什麼它是罕見的,儘管微軟最近看到了它的價值。

例外:解釋軟件

基於以上我們瞭解到,開發人員只為一種類型的目標系統編寫軟件。有許多應用程序,你可以下載並在Mac上運行,然後在Windows上覆制並運行,甚至可以再次複製並在Linux上運行而不出問題。這怎麼可能?

我一直在撒謊嗎?

事實證明,有一類軟件表面上看起來就像“無處不在”。你可以下載並在任何支持的平臺上運行它——關鍵詞是“支持”。事實上,你下載的是應用程序的源代碼,而另一個應用程序(解釋器)則直接實時運行源代碼。這有點過於簡單化了,所以讓我們來看看這是如何在兩種語言中工作的。

java

當Java第一次發佈時,它的承諾是(字面意思是)“只寫一次,在任何地方運行”,其思想是通過使用Java函數來創建應用程序,這些函數用於保存文件、進行計算或創建應用程序窗口。然後,每個支持的計算機平臺的Java運行時環境(JRE)將運行代碼,並將這些代碼轉換為本機OS函數。那麼,Java的訣竅就是它不會“直接”在操作系統上運行。它運行在JRE的一個稱為Java虛擬機的部分中,這就是在操作系統上運行的部分。

通過在應用程序和操作系統之間**這個附加的軟件層,Java允許您關注一組跨操作系統相同的功能。您可以告訴Java您想做什麼,讓系統的JVM擔心如何真正做到這一點。下圖顯示了這一點,JIDE軟件的Java桌面應用程序框架為Mac(上圖)、Windows(左中)、pure Java(右中)和Linux(下圖)顯示了相同的應用程序。

software os compatibility jide jdaf

Java程序不能精確地實時“編譯”自己。相反,Java編譯器將把它們轉換成“字節碼”,你可以把字節碼看作是一個半生不熟的程序。當開發人員發佈應用程序時,會盡可能多地編譯它,而不知道它將在哪個操作系統上運行。當您實際啟動它時,JVM將“烘焙它的剩餘部分”,以適應特定於主機操作系統的功能。

python

一種流行的解釋語言是Python。當您運行Python腳本時,Python解釋器將代碼轉換為操作系統的指令。它的功能也可以類似於Java:當您從應用程序外部“導入”代碼時,它會在第一次運行時編譯為字節碼。然後解釋器將知道,在隨後的運行中,原始代碼是否已更改,此時它將重新編譯為新的字節碼。

這種“按需”運行的一個很酷的副產品是,您可以使用解釋器以交互方式開發腳本。只需在命令行中鍵入“python”,就可以啟動解釋器,並且可以立即運行代碼並查看結果。

software os compatibility python interpreter

這意味著開發人員可以“實時”地進行操作和調整,然後,一旦一行代碼做了他們想做的事情,就將其複製並粘貼到腳本文件中(這比非解釋語言程序員必須做的“代碼編譯測試”循環要高效得多)。

即使軟件是一樣的,也可能不是

不幸的是,對於用戶來說,科技行業還沒有開發出真正的“通用”格式。它可能永遠不會這樣做。引入這些類型的標準通常會產生一個“最小公分母”的解決方案,為了得到每個人的認可而做出讓步。

你怎麼認為?你願意擁有通用的兼容軟件嗎,即使這意味著它沒有那麼好?或者你對你使用的操作系統還滿意,對其他平臺的應用程序不感興趣?請在下面的評論中告訴我們!

圖片來源:首席生產官/Shutterstock

  • 發表於 2021-03-13 08:34
  • 閱讀 ( 53 )
  • 分類:科技

你可能感興趣的文章

6個最佳arduino替代微控制器

...結合,你就會明白為什麼許多人認為這些微型微控制器是一個強大的替代品。 ...

  • 發佈於 2021-03-11 16:53
  • 閲讀 ( 72 )

不應購買藍芽鍵盤的6個原因

...供了便攜性和跨裝置相容性的完美結合,但它們並不適合所有人。雖然有值得購買的藍芽鍵盤,你應該知道,他們來取捨。首先,如果你的電腦沒有內建藍芽,你需要一個藍芽介面卡。 ...

  • 發佈於 2021-03-12 06:33
  • 閲讀 ( 51 )

在mac上執行windows程式的最簡單方法

... 也許你需要使用一個只在Windows上執行的特定軟體,或者只是錯過了Windows時代的一些東西。不管怎樣,你都可以在Mac上執行Windows程式。 ...

  • 發佈於 2021-03-14 01:03
  • 閲讀 ( 53 )

為什麼你什麼都不用樹莓皮

想**一個網路連線的doodad,它會閃爍LED嗎?你可以用樹莓皮!畢竟,當你的工具箱裡只有一把錘子的時候,你很容易把一切都看成釘子。但你不應該,這就是原因。 ...

  • 發佈於 2021-03-14 14:25
  • 閲讀 ( 70 )

linux桌面應用的5種終端替代方案

...機的**商穆特(Mutt)這樣說。雖然桌面客戶機可能不適合所有人,但它們仍然扮演著一個角色,即使現在的web郵件有多麼普遍。即便如此,Linux的電子郵件客戶機並不多。 ...

  • 發佈於 2021-03-14 19:57
  • 閲讀 ( 46 )

chromebook vs.chromebox vs.chromebit:哪個最適合你?

... 但chromebits並不適合所有人 ...

  • 發佈於 2021-03-15 03:27
  • 閲讀 ( 42 )

linux應用商店比較:哪一個適合你?

...s上實現同樣的轉變。Linux不需要做任何改變。在那裡,從一個地方獲取應用程式早已成為常態! ...

  • 發佈於 2021-03-15 06:51
  • 閲讀 ( 67 )

最討厭的windows版本(以及為什麼它們如此糟糕)

...,但XP仍在生產中,還沒有準備好廣泛使用。微軟想推出一個新的Windows消費版來引起轟動,於是我誕生了。 ...

  • 發佈於 2021-03-16 17:17
  • 閲讀 ( 52 )

為什麼您不再需要kvm交換機來進行多pc設定

每當我想到一個KVM開關,我的大腦就會轉向那些古老的硬體a-B開關,它允許你將一臺並行印表機連線到兩臺計算機上。在高速網際網路、無縫Wi-Fi和USB集線器出現之前,物理KVM交換機是一個方便的工具。 ...

  • 發佈於 2021-03-18 06:39
  • 閲讀 ( 38 )

什麼是chromecast?它是如何工作的?

...低的價格點,谷歌做了一些削減,這就是為什麼它不適合所有人。 ...

  • 發佈於 2021-03-21 09:27
  • 閲讀 ( 52 )