成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

國產操作系統最致命的短板,被這個開源軟件補上了!

系統 Linux
看了Wine干的這些事情,你肯定會感慨,讓Windows應用在Linux上順利地跑起來可真不容易啊。這是沒辦法的事情,誰讓Windows是桌面操作系統的老大呢?

“國產操作系統為什么沒人用?”

“因為上面沒有軟件。”

“那么多軟件,下載下來,一安裝不就行了嗎?”

“不行,現在的軟件都是給Windows開發的,國產操作系統是基于Linux爆改的,軟件跑不了。”

“那就給國產Linux開發軟件啊?!”

“沒人開發,因為國產操作系統沒人用。”

“你這不就成了雞生蛋,蛋生雞的了,無解循環......”

這是我和一個朋友關于國產桌面操作系統的一次對話。

其實這幾年國產桌面操作發展得相當不錯,像Deepin,統信等根據國人的審美和操作習慣,做了很多本土化工作,并且內置了各種常用的軟件如WPS Office、搜狗輸入法、有道詞典、網易云音樂等,用來做日常辦公完全夠用。

圖片圖片

但是,國產操作系統做得再好,也只能涵蓋一部分軟件,對于Windows龐大生態生態中那千千萬萬的軟件,只能望洋興嘆了。

如果你要用的軟件不被國產操作系統支持,那怎么辦?

最簡單的方案是用類似VirtualBox這樣的虛擬機,在虛擬機中運行Windows,然后在Windows上安裝想要的軟件。

圖片圖片

這種一層摞一層的辦法有用,就是效率太低,運行速度太慢:

圖片圖片

有沒有辦法,既能在Linux上運行Windows軟件,又能避免效率的損失呢?

有!這個軟件叫做Wine。

圖片圖片

Wine不是虛擬機,而是一個軟件兼容層,它通過“轉發”的方式,讓Windows程序可以運行在Linux之上。

要想理解Wine的秘密,必須得從最底層看起。

1.可移植的CPU指令

比如這段代碼:

int foo(int x) {
    return x * x;
}

都基于x86 CPU編譯(這一點兒很重要),在Linux上這樣的:

圖片圖片

在Windows上是這樣的:

圖片圖片

看起來差別相當大,對吧?

但是,由于兩者生成的代碼都是基于x86 CPU的,換句話說,CPU指令集(mov、imul、ret之類)是完全相同的。

圖片圖片

Linux上可執行文件是ELF格式,下圖的.text 區域就是CPU的指令

圖片圖片

Window上的可執行文件是PE格式,CPU指令也在.text區域。

圖片圖片

既然.text區域的CPU指令在Windows和Linux之間是“可移植的”,你可能立刻會想到,如果有一個程序,可以把foo函數在Windows編譯出的.text 給“取”出來,拿到Linux上執行,應該是可以運行的。

Wine其實就是這么干的,它把Windows可執行文件加載到內存中,分析一下,找到可執行代碼的位置,跳轉到這個地方執行就可以了!

2.系統調用

如果事情就這么簡單,任何人都可以寫一個Wine,Windows上的海量軟件就可以輕松移植到Linux上,Windows生態的優勢將不復存在。

但Windows的桌面霸主地位堅如磐石,這其中的關鍵就是:系統調用。

操作系統是對硬件功能的封裝,它對外提供了一系列服務如讀寫硬盤、讀寫內存、進程管理等。

應用程序想使用這些服務,必須通過系統調用來進行,別無它法。

而Windows和Linux的系統調用,是完全不同的。

名稱不同、參數不同、語義也不同。

圖片圖片

一個稍微有用的應用程序,肯定要使用系統調用(無論是直接還是間接方式),那就立刻和操作系統綁定了。

比如這個hello world。

#include <stdio.h>
int main() {
    printf("Hello!\n");
    return 0;
}

在Linux上是這樣的,它調用的是puts函數。

圖片圖片

在Windows上編譯后是這樣的,調用的是printf函數。

圖片圖片

puts和printf都C標準庫的函數,C標準庫最終還是走到系統調用那里,畢竟你要在控制臺輸出“Hello!”,這事兒只能操作系統來辦。

要想在Linux上運行Windows程序,有兩條路。

(1)把Windows系統調用在Linux上重新實現一遍,這和重寫OS差不多了。

(2)把Windows系統調用攔截,轉發到Linux的系統調用。

Wine開發團隊選擇了第二條道路,當應用程序調用Windows 系統調用時,Wine進行“攔截”,然后轉發到Linux的系統調用。

圖片圖片

這個事情畫個圖很簡單,實現起來太麻煩了。

Windows的系統調用非常多,源碼又不公開,全是黑匣子,我們不知道Windows內部到底是如何實現的,Windows文檔又很差......(大膽猜測一些,微軟是故意的)。

更要命的是,這些系統調用還存在一些錯誤、缺陷、奇怪的副作用,Wine在攔截轉發的時候,這些錯誤和缺陷不但不能修復,還必須原封不動地去復現它們。

如果不這么干,那些Windows軟件在Linux上運行起來的行為就不同了。

這還不算完,別忘了Windows游戲啊,它們都在調用微軟的DirectX,這是微軟專門為游戲開發提供的API,僅支持Windows。

在Linux平臺下也有個對應的東西,原來叫OpenGL,現在新一代的圖形API叫做Vulkan。

很明顯,DirectX和Vulkan是不同的東西。

圖片圖片

為了把DirectX調用轉換成Vulkan,Valve(Steam就是他們家的)和CodeWeavers(主要贊助Wine)合作開發了Proton。

圖片圖片

Proton 最初于 2018 年 8 月 21 日發布,當時Valve還發布了一個 27 款游戲的名單,這些游戲經過測試和認證,性能與 Windows 原生版本相同,無需最終用戶進行調整。其中包括《毀滅戰士》(2016 年)、《雷神之錘》和《最終幻想 VI》等。

3.總結

看了Wine干的這些事情,你肯定會感慨,讓Windows應用在Linux上順利地跑起來可真不容易啊。

這是沒辦法的事情,誰讓Windows是桌面操作系統的老大呢?

微軟通過Windows系統調用API和DirectX等API,構建了非常寬的護城河。

開源的Wine在這個護城河上建立一座橋,這座橋雖然還不完美,但足以讓大量的Windows應用來到Linux的世界快樂地玩耍。

相信國產操作系統一定會充分地利用Wine這樣開源界的成果,讓自己的生態變得更加豐富。

責任編輯:武曉燕 來源: 碼農翻身
相關推薦

2014-09-17 14:05:14

2018-09-13 10:42:00

工具代碼機器學習

2014-08-05 13:36:36

linux國產操作系統

2018-05-18 11:14:52

2014-07-28 17:25:25

國產Linux

2014-09-22 15:33:54

2016-08-10 20:35:47

操作系統Linux操作系統

2018-06-08 11:17:11

2014-09-16 09:39:04

2018-05-24 14:35:02

操作系統國產LINUX

2024-02-07 12:31:00

2014-09-28 11:08:40

國產操作系統

2012-05-07 15:01:36

操作系統

2014-09-12 14:03:45

操作系統

2016-11-03 19:35:52

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 精品成人佐山爱一区二区 | a免费在线 | 日本字幕在线观看 | 国产乱码久久久久久一区二区 | 精品视频一区二区在线观看 | 一级做a爰片久久毛片免费看 | 久久久久成人精品 | 91精品国产综合久久久动漫日韩 | 精品成人免费一区二区在线播放 | 91精品久久久久久久久久小网站 | 免费久久久久久 | 99久久久99久久国产片鸭王 | 日本网站免费观看 | 亚洲综合色丁香婷婷六月图片 | 久久精品亚洲精品国产欧美 | 国产精品日产欧美久久久久 | 欧美久久一区二区 | 久久久一二三区 | 亚洲综合一区二区三区 | 久久综合入口 | 在线免费观看黄色 | 插插宗合网 | 精品中文字幕一区二区 | 男人的天堂中文字幕 | 亚洲综合无码一区二区 | 天堂中文字幕av | 日韩精品久久久久 | 亚洲一区不卡在线 | 国产精品一区一区 | 狠狠干美女 | 成年人视频免费在线观看 | 人人干人人看 | 国产在线视频一区二区 | 黄色在线免费观看视频网站 | 在线播放国产一区二区三区 | 精品日韩一区 | 殴美黄色录像 | 精品网站999 | 黄网站涩免费蜜桃网站 | 精品日本久久久久久久久久 | 日日操夜夜操天天操 |