Linux 之父如何定義 Linux?

來源:馬哥教育node

連接:https://mp.weixin.qq.com/s/wwBt5H68tHmf_lHXrd_eSQlinux

本文是 Linus 寫於 1991年10月10日ios

LINUX是什麼?編程

LINUX是一個免費類unix內核,適用於386-AT計算機,附帶完整源代碼。主要讓黑客、計算機科學學生使用,學習和享受。它大部分用C編寫,可是一小部分是用gnu格式彙編,並且引導序列用的是因特爾086彙編語言。C代碼是相對ANSI的,使用一些GNU加強特性(大多爲 __asm__ 和 inline)。安全

然而有不少可用於386電腦的unices,他們大部分要花不少錢,並且不附帶源碼。所以他們是使用計算機的理想選擇,可是若是你想了解他們如何工做,那是不可能的。bash

也有一些  Unix 是附帶源碼的。Minix,Andrew S. Tanenbaum編寫的學習工具,已經在大學中做爲教學工具使用了不少年了。BSD-386系統是附帶源碼的,可是有版權限制,並且要花不少錢(我記得起始價格爲$995)。GNU內核(Hurd)將會是免費的,可是如今尚未準備好,並且對於瞭解和學習它們來講有點龐大。併發

LINUX與Minix是最類似的,因爲它很小並且不是很是複雜,所以易於理解(嗯…)。LINUX是基於Minix編寫的,所以有至關多的相同點,任何Minix黑客在使用LINUX的時候都感受很是熟悉。不過,沒有在項目中使用Minix代碼,所以Minix版權沒有限制到這個新系統。它也是徹底免費的,並且它的版權很是寬鬆。所以不像使用Minix,它不須要幾兆字節大小的區別。less

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)  1991年10月10日

 

英文:Linus Torvalds,翻譯:開源中國

www.oschina.net/translate/linux-a-free-unix-386-kernel

相關文章
相關標籤/搜索