以 Bore 為例,下圖是 Bore 的 Assets

檔案命名依照使用 “-” 做分隔,依序為
- 產品名稱
- 版本
- CPU Archicture
- OS
- Runtime (C Compiler)
接下來會介紹 CPU Archicture 跟 Runtime (C Compiler) 的差異
-
CPU Archicture
CPU 的架構,涉及到的內部組件配置、數據處理方法、支持的指令集合。簡單來說就是 CPU 如何執行指令、運算及與電腦溝通的方式。指令集通常會再分為 64bits 或是 32bits,取決於電腦的 CPU,常見的指令集有底下三種:
- x86:一般的 Windows 使用的指令集,由 Intel 開發設計
- 32bits (x86, x86_32, i686)
- 64bis (x86_64, amd64):取名叫 amd64 的原因在於一開始 Intel 並不打算開發 64 位元的指令集給一般大眾使用,不過 AMD 這間公司做出來後大受好評,所以 Intel 才也跟上出了 x86_64。
- ARM:一般手機使用的指令集,由 ARM 開發設計
- 32bits (v7)
- 64bits (v8, aarch64)
- RISC-V:開源的指令集,目前較少見
-
Runtime (C Compiler)
C 語言在開始執行程式前,如果有需要用到 I/O 的功能,都要先 #include <stdio.h>,才會有 I/O 相關的 stdandard library 可以用,裡面會有如何與電腦互動的實作。例如 printf 要怎麼印出,這樣程式語言才有可執行性,否則你只是使用的 printf 就只是一個函數,沒有辦法實際使用。
而 Runtime 就是這些實作的機器碼,會去呼叫不同作業系統的 API,再藉由這些 API 去和電腦的 I/O 做互動。

一般來說,這些編譯出來的 Runtime 都會直接連結到電腦的 stdlib 來實作,但其實 library 是可以換的。需要換的情形常見是因為直接綁死電腦的 stdlib (Dynamic link),也就是 .so 檔,可能會造成版本不相容導致在其他電腦執行不了,所以直接換成自己檔案本身包進去的 stdlib (Static link) 就可以不受版本不同的影響。
常見的 C Compiler 有
- Windows
- msvc ( Microsoft Visual C),大概佔據 9 成以上
- mingw (從 Linux 的 gcc 的移植),DevC++ 就是使用這個
- clang
- Linux
- gcc,預設是 gnu libc 的動態連結 (Dynamic link),gnu libc 也有靜態連結 (Static link),不過做的不完全,有時候還是會用到 OS 的 .so 檔。替代方案是可以換成 musl libc,這個是靜態連結且做得較好。
- clang
- Darwin (Apple pc)
所以回頭看 Bore 的檔案命名:
- bore-v0.5.1-aarch64-apple-darwin.tar.gz:表示該檔案要在 Apple 的 pc 上跑,使用的指令集是 ARM 的 64 bit
- bore-v0.5.1-i686-unknown-linux-musl.tar.gz:表示該檔案要在 Linux 上跑 (unknown 表示不確定是哪個版本,可能是 Ubuntu, Rocky Linux 或其他版本能跑得動),使用的指令集是 x86 的 32 位元,C Compiler 則是 gcc,但 standard library 的連結方式改成 msul (屬於動態連結)
- bore-v0.5.1-x86_64-pc-windows-msvc.zip:表示該檔案要在 Windows 的 pc 上跑,使用的指令集是 x86 的 64 位元,C Compilier 則是用 Microsoft 預設的 msvc