Linus 定義 Linux

2021-02-25 Linux愛好者

(點擊上方公眾號,可快速關注)

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

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

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

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的使用:

完全開源。因此不能單獨發布二進位,即使你只修改了一點。

你不能從發布版獲取利益。事實上甚至「裝卸費用」都是不被接受的。

你要保持完整的適當版權。

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

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日

【關於投稿】

如果大家有原創好文投稿,請直接給公號發送留言。

① 留言格式:
【投稿】+《 文章標題》+ 文章連結

② 示例:
【投稿】《不要自稱是程式設計師,我十多年的 IT 職場總結》:http://blog.jobbole.com/94148/

③ 最後請附上您的個人簡介哈~

看完本文有收穫?請分享給更多人

關注「Linux 愛好者」,提升Linux技能

相關焦點

  • linus tech tips掙多少錢?
    無意中刷到這條信息, 我以為是寫linux的linus有一個自己的頻道或者雜誌什麼的,出於好奇點過去看了一下,結果發現完全不是同一個人,裡面是一個加拿大人在做一個
  • Linus:「我刪除了Linux,因為它就是個垃圾!」
    點擊上方藍字關注 👆👆文 | 羅奇奇出品 | OSC開源社區(ID:oschina2013)1月 25日, Linus Torvalds 在 Linux 的 GitHub 倉庫中提交了一個惡作劇 README 頁面:https://github.com/torvalds/linux
  • Linus Torvalds 是一個糟糕的老闆嗎?
    via: http://www.computerworld.com/article/3004387/it-management/how-bad-a-boss-is-linus-torvalds.html作者:Steven J.
  • MacOS和Linux內核的區別
    嵌入式linux QQ交流群:175159209,歡迎愛好者加入交流技術問題!
  • 不為人知的 Linus 大神
    本文翻譯自:https://itsfoss.com/linus-torvalds-facts/[2]References[1] 【TED】Linux 作業系統之父: http://open.163.com/newview/movie/free?
  • linux 之父 Linus Torvalds :完全沒想到我的愛好實驗習作能存在 30 年
    「這是個文化議題,雖然最初體現得不明顯(92 年時已經陸續出現了各種商業 linux 發行版),但卻貫穿了整個開源發展史。在此期間,IBM 的加入、甲骨文、Red Hat 上市等等都是重大事件,但我認為最重要的就是開源內核開發者學會了如何在眾多企業之間共生共存。這一點非常獨特、也非常關鍵。」
  • Linus Torvalds:Linux 內核、社區多元化和開發者的未來
    (給Linux愛好者加星標,提升Linux技能)轉自:oschinawww.oschina.net/news/116813/lin
  • Linus Torvalds:「C++ 真是一門很爛的語言!」
    參考連結:https://developers.slashdot.org/story/21/04/17/009241/linus-torvalds-says-rust-closer-for-linux-kernel-development-calls-c-a-crap-language#commentshttps://lwn.net/Articles
  • Linus Torvalds:未來 25 年,Linux 風採依舊!
    作者 | Robert Young譯者 | 譚開朗責編 | 屠敏出品 | CSDN(ID:CSDNnews)以下為譯文:Robert Young 於 1994 年第一次採訪Linus Torvalds:https://www.linuxjournal.com
  • Linus Torvalds 不建議使用 ZFS On Linux
    嵌入式linux QQ交流群:175159209,歡迎愛好者加入交流技術問題!技術乾貨、教程、資訊、高薪職位訂閱點擊標題下方「嵌入式Linux中文站」分享點擊右上角分享按鈕投稿admin@embeddedlinux.org.cn
  • Linux中對EOF自定義終止符的介紹
    EOF自定義終止符用法,我們在腳本中經常會發現使用EOF的情況。
  • 什麼是Linux?國產系統都源自於他!他是程式設計師的自由鬥士
    有意思的是,linus編寫Linux的目的其實很簡單,當時他想使用一個叫MINIX的內核,但是因為該內核僅供教育使用,無法用於商用之中,而商用版本的價格又太貴了。所以在沒有辦法的情況下,linus自己編寫了一個新的內核出來使用,沒想到這個內核在日後竟然發展成了唯一一個能夠威脅Windows地位的存在。2、自由的系統
  • Linus Torvalds :開源改變了 Linux, 否則它就完了 | Linux 中國
    導讀:Linux 本來會像其他業餘項目一樣被拋在後面,但開源改變了這一點。
  • Linus吐槽桌面版Linux
    有趣的是,當時 Linus 還在會上指出:Valve 將拯救 linux 桌面版。從目前的情況來看 Linus 的眼光確實挺準。
  • linux運維工程師的定義
    無論你找的是什麼運維,不會linux你就喪失了至少一半的競爭機率。Why?因為伺服器端的系統幾乎都是Linux啊!可想而知,懂linux是件多麼必要的事情。言歸正傳,linux基礎包括了些什麼內容?筆者認為有如下幾方面。
  • Linus Torvalds:我們都老了,但Linux維護真的很難找
    Linux命令大全:https://www.linuxcool.com/官方站點:www.linuxprobe.com Linux命令大全:www.linuxcool.comLinux系統下載站:www.linuxdown.com
  • C語言之父和Linux之父誰更偉大?
    ---出自linus自傳《just for fun》。「牛」是怎麼定義的呢?大家可以體會一下。難度從難度上講,編譯器要比作業系統難度高很多,而且linux並不是從零起步的,它是繼承unix系統內核的,使之適應PC兼容機,而我們知道,C語言之父Dennis M Ritchie同時也是unix的創建者之一,在發明C語言之後,他自己又重新用C寫了一遍unix,linus對他就是小弟弟了,寫個作業系統對他而言並不費事。
  • Linus Torvalds正式發布了Linux 5.8內核,現在可以下載了
    來自:https://www.linuxmi.com/linux-kernel-5-8.htmlLinus Torvald已經正式宣布發布
  • Fedora 30 正式發布,Linux之父Linus Torvalds的日常作業系統
    下載連結見原文長按或掃描左圖識別二維碼加我不定時在朋友圈發布邀請碼更多Fedora相關信息見Fedora 專題頁面 https://www.linuxidc.com/topicnews.aspx?tid=5Linux公社的RSS地址:https://www.linuxidc.com/rssFeed.aspx本文永久更新連結地址:https://www.linuxidc.com/Linux/2019-04/158404.htm