# GNU Project

## โครงการ GNU (GNU Project)

ได้ถูกริเริ่มจากนักวิจัยจาก M.I.T ชื่อนาย Richard Matthew Stallman ซึ่งถูกเรียกขานว่า RMS เนื่องจากระบบปฏิบัติการ UNIX ไม่ได้ฟรีอีกต่อไปแล้ว โครงการ GNU นี้จึงได้เริ่มต้นขึ้นตั้งแต่เดือนกันยายน ปี ค.ศ. 1984 โดยวัตถุประสงค์หลักของโครงการนี้คือการพยายามเริ่มต้นสร้างแกนหลักของระบบปฏิบัติการ (Core OS) หรือเคอร์เนล (Kernel) โดยเรียกกันว่า HURD รวมถึงการสร้างกลุ่มโปรแกรมเครื่องมือต่างๆ เช่น C compiler (gcc), make (GNU make), Emacs, C library (glibc), และ coreutils (เช่นคำสั่ง ls, cp เป็นต้น) ใหม่ทั้งหมดเพื่อให้ทุกคนสามารถนำไปใช้ได้ฟรีเพื่อทดแทนระบบปฏิบัติการ UNIX แต่อย่างไรก็ตามการพัฒนาตัว HURD ก็ยังไม่เป็นไปตามแผนจำเป็นต้องหยุดกลางคัน นอกจากนั้น Stallman ได้ก่อตั้งองค์กรซอฟท์แวร์เสรี (Free Software Foundation) ซึ่งเป็นองค์กรที่ทำหน้าที่ให้การสนับสนุนการพัฒนาซอฟท์แวร์เสรี ที่มีบทบาทมากในปัจจุบันนี้

ระบบปฏิบัติการที่มีบทบาทในการกระตุ้นวงการพัฒนา ซึ่งได้รับอิทธิพลมาจากโครงการ GNU คือระบบปฏิบัติการ MINIX ย่อมาจาก “Minimal UNIX” ภายใต้พื้นฐานสถาปัตยกรรม Microkernel ซึ่งถูกพัฒนาโดยนาย Andrew S. Tanenbaum ในปี ค.ศ. 1987 และเขาเองก็ได้เขียนหนังสือชื่อว่า “Operating Systems: Design and Implementation” ร่วมกับนาย Albert Woodhull เพื่อต้องการที่จะเผยแพร่แนวทางการออกแบบและพัฒนาระบบปฏิบัติการให้กับวงการด้านนี้

{% hint style="info" %}
The GNU Core Utilities
{% endhint %}

| [**arch**](https://www.maizure.org/projects/decoded-gnu-coreutils/arch.html)       | [**base64**](https://www.maizure.org/projects/decoded-gnu-coreutils/base64.html)     | [**basename**](https://www.maizure.org/projects/decoded-gnu-coreutils/basename.html) | [**cat**](https://www.maizure.org/projects/decoded-gnu-coreutils/cat.html)             | [**chcon**](https://www.maizure.org/projects/decoded-gnu-coreutils/chcon.html)       |
| ---------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------ |
| [**chgrp**](https://www.maizure.org/projects/decoded-gnu-coreutils/chgrp.html)     | [**chmod**](https://www.maizure.org/projects/decoded-gnu-coreutils/chmod.html)       | [**chown**](https://www.maizure.org/projects/decoded-gnu-coreutils/chown.html)       | [**chroot**](https://www.maizure.org/projects/decoded-gnu-coreutils/chroot.html)       | [**cksum**](https://www.maizure.org/projects/decoded-gnu-coreutils/cksum.html)       |
| [**comm**](https://www.maizure.org/projects/decoded-gnu-coreutils/comm.html)       | [**cp**](https://www.maizure.org/projects/decoded-gnu-coreutils/cp.html)             | [**csplit**](https://www.maizure.org/projects/decoded-gnu-coreutils/csplit.html)     | [**cut**](https://www.maizure.org/projects/decoded-gnu-coreutils/cut.html)             | [**date**](https://www.maizure.org/projects/decoded-gnu-coreutils/date.html)         |
| [**dd**](https://www.maizure.org/projects/decoded-gnu-coreutils/dd.html)           | [**df**](https://www.maizure.org/projects/decoded-gnu-coreutils/df.html)             | [**dir**](https://www.maizure.org/projects/decoded-gnu-coreutils/dir.html)           | [**dircolors**](https://www.maizure.org/projects/decoded-gnu-coreutils/dircolors.html) | [**dirname**](https://www.maizure.org/projects/decoded-gnu-coreutils/dirname.html)   |
| [**du**](https://www.maizure.org/projects/decoded-gnu-coreutils/du.html)           | [**echo**](https://www.maizure.org/projects/decoded-gnu-coreutils/echo.html)         | [**env**](https://www.maizure.org/projects/decoded-gnu-coreutils/env.html)           | [**expand**](https://www.maizure.org/projects/decoded-gnu-coreutils/expand.html)       | [**expr**](https://www.maizure.org/projects/decoded-gnu-coreutils/expr.html)         |
| [**factor**](https://www.maizure.org/projects/decoded-gnu-coreutils/factor.html)   | [**false**](https://www.maizure.org/projects/decoded-gnu-coreutils/false.html)       | [**fmt**](https://www.maizure.org/projects/decoded-gnu-coreutils/fmt.html)           | [**fold**](https://www.maizure.org/projects/decoded-gnu-coreutils/fold.html)           | [**groups**](https://www.maizure.org/projects/decoded-gnu-coreutils/groups.html)     |
| [**head**](https://www.maizure.org/projects/decoded-gnu-coreutils/head.html)       | [**hostid**](https://www.maizure.org/projects/decoded-gnu-coreutils/hostid.html)     | [**hostname**](https://www.maizure.org/projects/decoded-gnu-coreutils/hostname.html) | [**id**](https://www.maizure.org/projects/decoded-gnu-coreutils/id.html)               | [**install**](https://www.maizure.org/projects/decoded-gnu-coreutils/install.html)   |
| [**join**](https://www.maizure.org/projects/decoded-gnu-coreutils/join.html)       | [**kill**](https://www.maizure.org/projects/decoded-gnu-coreutils/kill.html)         | [**link**](https://www.maizure.org/projects/decoded-gnu-coreutils/link.html)         | [**ln**](https://www.maizure.org/projects/decoded-gnu-coreutils/ln.html)               | [**logname**](https://www.maizure.org/projects/decoded-gnu-coreutils/logname.html)   |
| [**ls**](https://www.maizure.org/projects/decoded-gnu-coreutils/ls.html)           | [**md5sum**](https://www.maizure.org/projects/decoded-gnu-coreutils/md5sum.html)     | [**mkdir**](https://www.maizure.org/projects/decoded-gnu-coreutils/mkdir.html)       | [**mkfifo**](https://www.maizure.org/projects/decoded-gnu-coreutils/mkfifo.html)       | [**mknod**](https://www.maizure.org/projects/decoded-gnu-coreutils/mknod.html)       |
| [**mktemp**](https://www.maizure.org/projects/decoded-gnu-coreutils/mktemp.html)   | [**mv**](https://www.maizure.org/projects/decoded-gnu-coreutils/mv.html)             | [**nice**](https://www.maizure.org/projects/decoded-gnu-coreutils/nice.html)         | [**nl**](https://www.maizure.org/projects/decoded-gnu-coreutils/nl.html)               | [**nohup**](https://www.maizure.org/projects/decoded-gnu-coreutils/nohup.html)       |
| [**nproc**](https://www.maizure.org/projects/decoded-gnu-coreutils/nproc.html)     | [**numfmt**](https://www.maizure.org/projects/decoded-gnu-coreutils/numfmt.html)     | [**od**](https://www.maizure.org/projects/decoded-gnu-coreutils/od.html)             | [**paste**](https://www.maizure.org/projects/decoded-gnu-coreutils/paste.html)         | [**pathchk**](https://www.maizure.org/projects/decoded-gnu-coreutils/pathchk.html)   |
| [**pinky**](https://www.maizure.org/projects/decoded-gnu-coreutils/pinky.html)     | [**pr**](https://www.maizure.org/projects/decoded-gnu-coreutils/pr.html)             | [**printenv**](https://www.maizure.org/projects/decoded-gnu-coreutils/printenv.html) | [**printf**](https://www.maizure.org/projects/decoded-gnu-coreutils/printf.html)       | [**ptx**](https://www.maizure.org/projects/decoded-gnu-coreutils/ptx.html)           |
| [**pwd**](https://www.maizure.org/projects/decoded-gnu-coreutils/pwd.html)         | [**readlink**](https://www.maizure.org/projects/decoded-gnu-coreutils/readlink.html) | [**realpath**](https://www.maizure.org/projects/decoded-gnu-coreutils/realpath.html) | [**rm**](https://www.maizure.org/projects/decoded-gnu-coreutils/rm.html)               | [**rmdir**](https://www.maizure.org/projects/decoded-gnu-coreutils/rmdir.html)       |
| [**runcon**](https://www.maizure.org/projects/decoded-gnu-coreutils/runcon.html)   | [**seq**](https://www.maizure.org/projects/decoded-gnu-coreutils/seq.html)           | [**shred**](https://www.maizure.org/projects/decoded-gnu-coreutils/shred.html)       | [**shuf**](https://www.maizure.org/projects/decoded-gnu-coreutils/shuf.html)           | [**sleep**](https://www.maizure.org/projects/decoded-gnu-coreutils/sleep.html)       |
| [**sort**](https://www.maizure.org/projects/decoded-gnu-coreutils/sort.html)       | [**split**](https://www.maizure.org/projects/decoded-gnu-coreutils/split.html)       | [**stat**](https://www.maizure.org/projects/decoded-gnu-coreutils/stat.html)         | [**stdbuf**](https://www.maizure.org/projects/decoded-gnu-coreutils/stdbuf.html)       | [**stty**](https://www.maizure.org/projects/decoded-gnu-coreutils/stty.html)         |
| [**sum**](https://www.maizure.org/projects/decoded-gnu-coreutils/sum.html)         | [**tac**](https://www.maizure.org/projects/decoded-gnu-coreutils/tac.html)           | [**tail**](https://www.maizure.org/projects/decoded-gnu-coreutils/tail.html)         | [**tee**](https://www.maizure.org/projects/decoded-gnu-coreutils/tee.html)             | [**test**](https://www.maizure.org/projects/decoded-gnu-coreutils/test.html)         |
| [**timeout**](https://www.maizure.org/projects/decoded-gnu-coreutils/timeout.html) | [**touch**](https://www.maizure.org/projects/decoded-gnu-coreutils/touch.html)       | [**tr**](https://www.maizure.org/projects/decoded-gnu-coreutils/tr.html)             | [**true**](https://www.maizure.org/projects/decoded-gnu-coreutils/true.html)           | [**truncate**](https://www.maizure.org/projects/decoded-gnu-coreutils/truncate.html) |
| [**tsort**](https://www.maizure.org/projects/decoded-gnu-coreutils/tsort.html)     | [**tty**](https://www.maizure.org/projects/decoded-gnu-coreutils/tty.html)           | [**uname**](https://www.maizure.org/projects/decoded-gnu-coreutils/uname.html)       | [**unexpand**](https://www.maizure.org/projects/decoded-gnu-coreutils/unexpand.html)   | [**uniq**](https://www.maizure.org/projects/decoded-gnu-coreutils/uniq.html)         |
| [**unlink**](https://www.maizure.org/projects/decoded-gnu-coreutils/unlink.html)   | [**uptime**](https://www.maizure.org/projects/decoded-gnu-coreutils/uptime.html)     | [**users**](https://www.maizure.org/projects/decoded-gnu-coreutils/users.html)       | [**vdir**](https://www.maizure.org/projects/decoded-gnu-coreutils/vdir.html)           | [**wc**](https://www.maizure.org/projects/decoded-gnu-coreutils/wc.html)             |
| [**who**](https://www.maizure.org/projects/decoded-gnu-coreutils/who.html)         | [**whoami**](https://www.maizure.org/projects/decoded-gnu-coreutils/whoami.html)     | [**yes**](https://www.maizure.org/projects/decoded-gnu-coreutils/yes.html)           |                                                                                        |                                                                                      |

## กำเนิด Linux

จนกระทั่งปี ค.ศ. 1991 นักศึกษาสาขาวิทยาการคอมพิวเตอร์ มหาวิทยาลัย Helsinki ประเทศฟินแลนด์ ชื่อนาย Linus Torvalds ได้ซื้อเครื่องคอมพิวเตอร์ชนิดตั้งโต๊ะของบริษัท IBM รุ่น Intel 80386 เพื่อใช้เป็นเครื่องฯสำหรับการล๊อกอินเพื่อเข้าไปใช้งานะรบบในห้องแล๊ปของมหาวิทยาลัย ซึ่งในขณะนั้นระบบปฏิบัติการ MS-DOS และ MINIX จะเป็นระบบปฏิบัติการหลักในเครื่องคอมพิวเตอร์ทั่วไป เขาจึงได้มีแนวคิดที่จะสร้างระบบปฏิบัติการแบบเปิดและฟรี โดยมีพื้นฐานคล้ายระบบปฏิบัติการ UNIX (UNIX-like) ในช่วงแรกของการพัฒนาเขาได้พยายามพัฒนาเทอร์มินัล (Terminal Emulator) บนตัวระบบปฏิบัติการ MINIX แต่ก็ติดปัญหาทางด้านเทคนิคอยู่หลายอย่าง เขาจึงได้ตัดสินใจพัฒนาขึ้นเองใหม่ โดยได้ใช้เครื่องมือจากโครงการ GNU ทั้งหมด ไม่ว่าจะเป็น C library, gcc, binutils, fileutils, make, emacs เป็นต้น รวมทั้งการพัฒนา Kernel โดยพยายามพัฒนาโปรแกรมทั้งหมดตามมาตราฐาน POSIX เช่นเดียวกันระบบปฏิบัติการ UNIX จนในที่สุดก็สามารถออกมาได้สำเร็จในชื่อที่ตั้งขึ้นมาว่า “Freax” ซึ่งเป็นการผสมคำจากคำทั้งสามคำคือ Free, Freak และ X และได้เปลี่ยนมาเป็น “Linux” ตามชื่อตัวเขาเอง ทาง Linus Torvalds ก็ได้เปิดเผยโค้ดโปรแกรมของระบบปฏิบัติการทั้งหมดสู่สาธารณะ เพื่อให้นักพัฒนาทั่วโลกช่วยกันปรับปรุงแก้ไข โดยได้ทำการส่งข้อความผ่านกลุ่มผู้ใช้ใน MINIX ด้วยข้อความดังนี้ “*I’m doing a (free) operating system (just a hobby, won’t be big and professional like gnu) for 386(486) AT clones.*”

โดยรุ่นของระบบปฏิบัติการลีนุกซ์ ในเลข Linux 0.01 ยังค่อนข้างมีข้อจำกัดอยู่มาก คือจะสามารถถูกใช้ได้กับเครื่อง Intel 80386 เท่านั้น โดยภายในไฟล์ที่ได้เผยแพร่ออกไปจะประกอบไปด้วย 4 ไฟล์ที่ระบุรายละเอียดดังนี้

1. linux-0.01.tar.Z - sources to the kernel
2. bash.Z - compressed bash binary if you want to test it
3. update.Z - compressed update binary
4. RELNOTES-0.01

> [*http://www.kernel.org/pub/linux/kernel/Historic/old-versions/RELNOTES-0.01*](http://www.kernel.org/pub/linux/kernel/Historic/old-versions/RELNOTES-0.01)

ในที่สุดการเผยแพร่ในครั้งนี้ก็ได้เกิดการปฏิวัติโดยไม่คาดฝันเพราะมีนักพัฒนาจากทั่วทุกสารทิศจำนวนไม่น้อยที่ได้นำระบบปฏิบัติการนี้ไปพัฒนาจนเกิดความพยายามร่วมกันในการพัฒนาระบบปฏิบัติการลีนุกซ์อย่างจริงจังเป็นประวัติการณ์ แม้ว่าตัวนาย Linus Torvalds เองได้ถูกนาย Andrew Tanenbaum ผู้สร้าง MINIX ดูถูกไว้ว่าระบบปฏิบัติการลีนุกซ์จะล้าสมัยและจบลงก่อนปี ค.ศ. 1992 แต่ในที่สุดก็ได้พิสูจน์ว่าระบบปฏิบัติการลีนุกซ์ของเขานั้นสามารถยืนหยัดมาได้จนถึงวันนี้ ด้วยจุดแข็งของ Linux Kernel ของนาย Linus Torvalds และ GNU applications ของนาย Richard Stallman จนนิยมเรียกว่า GNU/Linux (*อ่านว่า กะ-นู-สแลส-ลีนุกซ์*) ซึ่งนาย Linus Torvalds ก็ยังคงเป็นผู้ควบคุมจัดการ (Supervisor) การพัฒนา Linux Kernel และดูแลองค์กร Linux Foundation ต่อไป
