Linus 定義 Linux

發表於2018-07-09

LINUX介紹

LINUX是什麼?

LINUX是一個免費類unix核心,適用於386-AT計算機,附帶完整原始碼。主要讓黑客、電腦科學學生使用,學習和享受。它大部分用C編寫,但是一小部分是用gnu格式彙編,而且引導序列用的是因特爾086組合語言。C程式碼是相對ANSI的,使用一些GNU增強特性(大多為 __asm__ 和 inline)。

然而有很多可用於386電腦的unices,他們大部分要花很多錢,而且不附帶原始碼。因此他們是使用計算機的理想選擇,但是如果你想了解他們如何工作,那是不可能的。

也有一些  Unix 是附帶原始碼的。Minix,Andrew S. Tanenbaum編寫的學習工具,已經在大學中作為教學工具使用了很多年了。BSD-386系統是附帶原始碼的,但是有版許可權制,而且要花很多錢(我記得起始價格為$995)。GNU核心(Hurd)將會是免費的,但是現在還沒有準備好,而且對於瞭解和學習它們來說有點龐大。

LINUX與Minix是最相似的,由於它很小而且不是非常複雜,因此易於理解(嗯…)。LINUX是基於Minix編寫的,因此有相當多的相同點,任何Minix黑客在使用LINUX的時候都感覺非常熟悉。不過,沒有在專案中使用Minix程式碼,因此Minix版權沒有限制到這個新系統。它也是完全免費的,而且它的版權非常寬鬆。因此不像使用Minix,它不需要幾兆位元組大小的區別。

LINUX版權

雖然是免費的釋出版,我還是從以下幾個方面限制了LINUX的使用:

  • 你可以自由複製和重新發布原始碼和二進位制,只要是:
  1. 完全開源。因此不能單獨釋出二進位制,即使你只修改了一點。
  2. 你不能從釋出版獲取利益。事實上甚至“裝卸費用”都是不被接受的。
  3. 你要保持完整的適當版權。
  • 根據需要你可能會修改原始碼,但是如果你釋出了新系統的一部分(或者只有二進位制),必須將新的程式碼包含進去。
  • 除了不包含版權的程式碼之外,你可能會做一些小的修改。這由你來定,但是如果能將相關內容或者程式碼告訴我,將不勝感激。

對任何使用或者擴充套件系統的人來說,這應該足夠寬鬆而不會引起任何擔憂。如果你有朋友真的不想要原始碼,只想要一個能執行的二進位制,你當然可以給他而不用擔心我會起訴你。不過最好只在朋友之間這麼做。

LINUX執行所需的硬體/軟體

LINUX是在一個執行Minix的386-AT上開發的。由於LINUX是一個真正的作業系統,而且需要直接與硬體互動來做一些事情,你必須有一個非常相似的系統來讓他順利執行:

  • 386-AT(PS/2之類是不同的,不能正常執行)
  • VGA或者EGA螢幕硬體。
  • 標準AT硬碟介面,IDE盤可以執行(實際上我用的就是這個)。
  • 正常真實模式BIOS。一些機器看起來是用虛-86模式執行啟動程式,而且在這樣的機器LINUX不會啟動和正常執行。

LINUX會發展成為一個自給自足的系統,現在需要Minix-386才能正常執行。你需要Minix讓初始化啟動檔案系統,和編譯OS二進位制。在那之後LINUX是一個自給自足的系統,但是為了做檔案系統檢查(fsck)和修改之後重編譯系統,推薦使用Minix。

獲取LINUX

LINUX現在可以使用匿名ftp從‘nic.funet.fi’的‘/pub/OS/Linux’目錄獲取。這個目錄包含作業系統的所有原始碼,還有一些二進位制檔案,因此你可以真正使用系統了。

注意!二進位制大多是GNU軟體,而且版權比LINUX的嚴格(GNU非盈利性版權)。因此你不能在不釋出他們原始碼的情況下重新發布他們,可以在/pub/GNU中找到。關於GNU非盈利性版權,從任何GNU軟體包瞭解更多。

此目錄中各類檔案如下:

  • linux-0.03.tar.Z–系統的完全原始碼,16位tar壓縮檔案格式。
  • Linux.tex–這個檔案的LATEX原始碼。
  • bash.Z–在LINUX下執行的bash二進位制檔案。這個二進位制檔案應該放到預留給LINUX檔案系統中的/bin/sh下(參見installation)。
  • update.Z–更新二進位制檔案,要放到/bin/update。
  • gccbin.tar.Z–GNU cc二進位制檔案需要由一個可執行的編譯器。這個tar壓縮包含有編譯器,載入器,彙編程式和支援程式(nm,strip等)。它還包含一個小型的庫,可用於大部分程式。
  • include.tar.Z–讓gcc執行的必要include檔案。
  • unistd.tar.Z–unistd庫程式的原始碼(即系統呼叫介面)。通過這個你可以使用系統獨立庫原始碼編譯一個大一些的庫。
  • utilbin.tar.Z–各種GNU工具的二進位制檔案,包括GNU的fileutils,make和tar。也包含克隆emacs的uemacs。
  • README, RELNOTES-0.01, INSTALLATION–包含一些(有點過時的)LINUX相關的資訊的ascii檔案。

讓系統執行的最少檔案是OS原始碼和bash和更新二進位制檔案。不過只用這些,你做不了什麼事。

安裝

在你拿到了必要LINUX檔案之後,你需要編譯系統和建立root目錄。必要的二進位制檔案需要放到root檔案系統中。按如下操作:
1. 備份你的軟體。雖然LINUX從沒有毀壞過我的任何檔案,但沒有什麼是必然的。安全勝過遺憾。
2. 選擇/建立一個標準MinixHD-分割槽作為新的LINUX root檔案系統。
3. 在新的root建立必要的裝置節點。LINUX與Minix使用相同型別的節點,所以使用Minix的mknod命令建立下面的裝置:節點號與在Minix中相同。

  • /dev/tty
  • /dev/tty[0-2]
  • /dev/hd[0-9]

4. 將必要檔案放到新的root分割槽。檔案應該放在下面目錄中:
希望你現在有一個功能正常的unix,而且你已經root許可權登入。LINUX現在沒有‘init’過程,只要你登出,系統會同步並等待。使用三指鍵(Ctrl+Alt+Del)重啟機器。

  • gcc
  • 新增連結到你選擇的/usr/local/lib中的檔案。我將ld,as,nm,strip和size連結到他們相應的 /usr/local/lib/gcc-XXX。
  • gccbin.tar.Z中的內容,除了gcc
  • include.tar.Z的內容
  • utilbin.tar.Z的內容
  • sh,即bash.Z
  • update
  • /bin:
  • /usr/bin:
  • /usr/include:
  • /usr/local/lib:
  • /usr/local/bin:
  • 編輯系統中的linux/include/linux/config.h。這個檔案包含了針對於系統的資訊:記憶體空間,硬碟型別,root分割槽號(同樣的與Minix中的編號相同),鍵盤型別(現在只有US和Finnish)等。
  • 編譯LINUX原始碼。一個簡單技巧就可以完成,在你編輯makefiles為適合你的系統之後(即,刪除-mstring-insnsflag,和修改適合你的路徑。)1.40之前版本gcc的使用者可能需要新增gnulib到makefile中‘LIBS=’一行。
  • 複製產生的映象檔案到軟盤(即,cp Image /dev/PS0 或者之類的)。
  • 使用新的軟盤重啟。啟動介面應該告訴你係統正在啟動(載入系統…),然後是一些必要的檔案系統資訊(xxx/XXX inodes/blocks free),接下來是一個確定,還有bash提示(如果你沒有.bashrc檔案,則初始化bash#)。

LINUX 缺失/不相容的東西

LINUX 是打算作為一個全部自給自足的核心,但現在並非如此。作為上面已經提到的,你需要 Minix 來設定啟動裝置並且檢查檔案系統當它執行起來的時候。這裡有一些其它的不足之處:

硬體的不相容。一些 AT 標準特性當前還沒有支援。最值得注意的是軟盤驅動,利用 LINUX 進行實際工作(備份 etc)當前是不可能的[譯者:這個是 oldlinux,這個是 Linus Torvalds 1991 年 10 月寫的文章,肯定當時是不行的]。還有序列連線的一些特性沒有被實現(2400 bps 波特率的硬連線,沒有結束通話(hang-up)提示等等 )。

標準 c 庫的不相容。gcc 分發版的 libc.a 沒有完成,我對免費可釋出的庫功能很感興趣。

一些系統呼叫沒有完全實現。這些設計絕大多數“極少呼叫”的特性比如除錯(誰無論如何需要它的話,你的程式第一次是無法工作的:-))以及其它的特性。

如上所述,沒有登陸和初始化程式。當前 LINUX 啟動在單使用者模式,以 root 作為控制檯使用者。對於一些移植工作足夠了,但不是實際可用的。

387支援[譯者:硬體浮點,當時 Intel 釋出了外接式 FPU] 沒有被實現,即使已有一些基礎程式被提供出來。”nic.funet.fi” 的 gcc 二進位制包使用軟浮點(ie 模擬功能呼叫)來支援 4 個基礎數學運算操作。387-支援將盡快實現當我的電腦安裝了這個硬體。希望在一個月或者兩個月。

現在還沒有重要的系統管理命令實現在 LINUX 中。這些包括 mkfs, format, fsck, mknod 等。這些命令需要的核心特性還沒有實現(format, mknod),一些命令只需要實現它。作為一個庫,我歡迎任何免費分發檔案。

如您所見,LINUX還不是一個完整的系統。 感謝您的幫助,使其變得更好。 我對為LINUX重寫的Minix命令不感興趣,除非你自己從頭開始編寫它們。 您當然可以免費(並鼓勵)將您的Minix發行版中的所有內容用於您自己的LINUX系統,但由於Minix的版權,它們無法分發給更廣泛的受眾。

這裡提到的一些問題將由我(即lines/387/floppy支援)儘快修復,但我希望得到庫函式的支援。感謝你們提交的錯誤報告及補丁還有願望清單,如果你真的有針對問題的補丁,我會立即嘗試去修復它。 小的更改將作為補丁形式傳送到郵件列表,並在nic.funet.fi'上設定,如果經過大量重寫,或者修復大的補丁,整個系統將在nic.funet.fi’更新。

LINUX移植軟體

LINUX被設計得讓移植相對容易。因此,就有了完整的termios實現和一些POSIX庫。我所移植的(誠然相對較少)程式沒有任何問題。

儘管LINUX與Minix非常相似,但Minix程式通常並不會比為其他nuix設計的程式更容易移植。因此,我不建議從一個特定程式的Minix版本開始,而應該嘗試從頭開始移植‘’virgin‘’程式。比BSD更接近SYSV,這意味著當給定一個-DUSG或者-DSYSV標識時,大多數程式很容易移植。

移植過程中最困難的一點就是缺少庫函式。這些必須由你來編寫,或者從其他的來源複製(Minix可能是個有緣人)。另外,一些程式(特別是GNU)有各種各樣的標識,這些標識可以定義哪些函式不可用(一旦在Makefile中新增了足夠量的-DXXX_MISSING標識,GNU fileutils將編譯的很好)。

已經移植的程式

下面這些程式已經移植到LINUX:

  • GNU cc (gcc, cc1, cpp)
  • GNU assembler (as386)
  • GNU binutils (ld, ar, nm, size, strip, ranlib)
  • GNU compress (16-bit)
  • GNU tar
  • GNU make
  • GNU bash (Bourne Again SHell)
  • GNU sed
  • GNU bison (yacc-lookalike)
  • GNU awk
  • GNU fileutils (ls, cp, rm, mkdir, rmdir, tail etc)
  • less
  • uemacs

所有上述程式都能在‘nic.funet.fi’(主要在’/pub/gnu’)中找到,大多數LIINUX-binaries都可以在‘/pub/OS/Linux’目錄中找到。包括gcc(cc1)有一些我自己增強的功能,所有這些程式都在沒有變化的情況下編譯的。先嚐試自己編譯,遇到問題可以將差異或者資源發郵件給我。

另外,我提起過明確地GNU差異編譯和執行。

技術幫助

LINUX目前有一個郵件列表,您可以通過郵件傳送到這個地址訂閱:Linux-activists-request@niksula.hut.fi ,並要求包括在列表中。然後你可以通過這個郵箱:Linux-activists@niksula.hut.fi 提問題,這將複製你的問題/答案/無論什麼,併傳送給列表中其他所有人。

請注意Linux-activists和Linux0activists-request的不同——第一個用於給列表中的所有人傳送郵件,第二個僅用於訂閱和取消訂閱。

當然,您也可以直接傳送郵件至 torvalds@kruuna.helsinki.fi。我會盡量在一兩天內回答所有的問題。

儘管‘nic.funet.fi’可能會保持合理的更新狀態,但是它還有些問題(即,我無法因為個人得到檔案,但可以通過幾個人)。因此,如果郵件列表上的人想要補丁或二進位制檔案,他們將會更快得到。

感謝

我要感謝學院…

說真的,如果沒有其他人的幫助,這個系統將永遠不會有曙光,甚至會變得更糟。Bruce Evans 幫助我找到了需要更改的位置,以便gcc能正確地處理浮點數,並提供許多有用的想法/建議(他的Minix-386用於構建系統)。此外,Earl Chew 的estdio包被用於標準的IO庫。像這樣更自由地分發包!

Alain W Black和Richard Tobin為Minix製作了gcc,沒有它我就無法編譯這個東西。GNU完成了我在Linux下使用的大部分程式。Alfred Leung傳送了美國鍵盤補丁。

附:“感謝”wirzeniu@kruuna.helsinki.fi他的“建設性”批評和“詼諧”的評論。他是我第一個$alpha$-測試者,他應該被授予勇氣獎章。

Linus Torvalds (torvalds@kruuna.helsinki.fi)  19911010

相關文章