JS可以寫作業系統?Windows 95被裝進Electron App
什麼是Windows 95?
這個Windows 95是微軟的那個作業系統嗎?可以說是,也可以說不是。它實際上是一個Electron app,可以執行在Windows、macOS和Linux上。請看下面的截圖:
Windows 95是一個原生app嗎?
是的,絕對是的。
它可以執行Doom遊戲嗎?
當然可以了,但建議在640x480的解析度和256色模式下執行DOS遊戲——一股很濃的復古懷舊風啊!
它可以在Docker中執行嗎?
當然可以了。
Linux:
Linux系統需要執行X-Server Display並安裝了Docker,然後啟動Docker:
docker run -it -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=unix$DISPLAY --device /dev/snd --name windows95 toolboc/windows95
Windows:
要求系統安裝Xming和Docker,然後按照以下步驟操作:
- 啟動Xming X11 Server
- 獲取宿主機器的IP地址
- 將IP地址新增到X0.hosts(這個檔案在Xming的安裝目錄)中
- 執行下面的命令,並將<XmingServerHostIp>替換成第二步獲得的IP地址:
docker run -it -e DISPLAY=<XmingServerHostIp> --name windows95 toolboc/windows95
Windows 95的工作原理是什麼?
Windows 95重度依賴了v86這個開源的JavaScript虛擬環境,所以,想要了解Windows 95,瞭解v86就夠了。
什麼是v86?
v86是一個基於JavaScript的虛擬環境,可以執行在瀏覽器和NodeJS中執行。在瀏覽器開啟這個連結(https://copy.sh/v86/?profile=linux26 )就可以看到你的瀏覽器變成了一個Linux作業系統。當然,它也可以載入Windows 98和其他Linux發行版。
怎樣自己啟動一個這樣的作業系統?
很簡單,建立一個HTML檔案,把下面的程式碼帖進去,儲存,用瀏覽器開啟就可以了。這是一個最基本的作業系統。不過,前提是要把相關的JavaScript庫和映象檔案下載到本地。
<!doctype html> <title>Basic Emulator</title><!-- not BASIC! --> <script src="../build/libv86.js"></script> <script> "use strict"; window.onload = function() { var emulator = window.emulator = new V86Starter({ memory_size: 32 * 1024 * 1024, vga_memory_size: 2 * 1024 * 1024, screen_container: document.getElementById("screen_container"), bios: { url: "../bios/seabios.bin", }, vga_bios: { url: "../bios/vgabios.bin", }, cdrom: { url: "../images/linux.iso", }, autostart: true, }); } </script> <!-- A minimal structure for the ScreenAdapter defined in browser/screen.js --> <div id="screen_container"> <div style="white-space: pre; font: 14px monospace; line-height: 14px"></div> <canvas style="display: none"></canvas> </div>
v86的原理又是什麼?
v86模擬了與x86相容的CPU和硬體,以下是v86模擬的硬體清單:
- 與x86相容的CPU,相當於奔騰1的指令集,主要包括:
- 任務門、在保護模式下進行遠距呼叫
- 16位的保護模式
- 單步
- MMX、SSE
- 一系列FPU指令
- 異常
- 一個浮點數單元(FPU),使用JavaScript的雙精度(64位)執行運算,所以精確度不如真實的FPU(80位)。
- 軟盤控制器(8272A)。
- 8042鍵盤控制器、PS2,支援滑鼠。
- 8254可程式設計間隔定時器(PIT)。
- 8259可程式設計中斷控制器(PIC)。
- CMOS實時時鐘(RTC)。
- 通用VGA顯示卡,支援SVGA和Bochs VBE擴充套件。
- PCI匯流排,這個模擬的硬體並不完整,畢竟不是所有裝置都會用到。
- IDE磁碟控制器。
- NE2000(8390)PCI網路介面卡。
- virtio檔案系統。
- SoundBlaster 16音效卡。
v86可以用來執行哪些作業系統?
可以通過v86執行的作業系統清單:
- Tinycore(3.16,4.8核心)
- Nanolinux
- Archlinux(會出現一些警告)
- ReactOS
- FreeDOS、Windows 1.01和MS-DOS
- KolibriOS(某些應用需要依賴SSE)
- Haiku boots(啟動很慢,可能需要30分鐘)
- Windows 1、3、95、98
- Windows XP(不穩定)
- FreeBSD