Apa yang membuat sistem operasi “Unix-Like”?

20

Saya sering menemukan istilah "unix-like" di banyak situs web.

Tidak ada standar; itu hanya dalam cara berperilaku.

Tetapi jika saya mengembangkan kernel dari awal, apa yang membuatnya dianggap "unix-like"?

Pada dasarnya, apa saja hal-hal yang membuat kode tertulis seperti Unix?

satu akson hilang
sumber
1
en.wikipedia.org/wiki/Unix-like (yang dengan sendirinya terhubung ke linfo.org/unix-like.html )
Drav Sloan

Jawaban:

15

Tidak ada standar; itu hanya dalam cara berperilaku.

Saya percaya sebagian besar OS "unix-like" memang melakukan upaya yang sangat serius untuk mematuhi standar POSIX , yang diawasi oleh Open Group, yang juga mengendalikan Spesifikasi UNIX Tunggal yang mendefinisikan "UNIX sejati". Yang pertama adalah inti dari yang belakangan.

Jadi, pada kenyataannya, ada standar yang mendefinisikan kepraktisan sistem operasi mirip-unix . Lihat daftar "sepenuhnya" dan "sebagian besar" OS yang sesuai di akhir artikel wikipedia di POSIX.

Ada beberapa alasan yang jelas bahwa linux secara khusus mungkin tidak dianggap sepenuhnya memenuhi atau disertifikasi oleh Single Unix Spesifikasi (SUS), tetapi ini bukan karena sistem linux yang diberikan tentu tidak kompatibel dengan itu. Artikel wikipedia meringkas spesifikasi dengan cara ini:

SUSv3 total sekitar 3700 halaman, yang secara tematis dibagi menjadi empat bagian utama:

Base Definition (XBD) - daftar definisi dan konvensi yang digunakan dalam spesifikasi dan daftar file header C yang harus disediakan oleh sistem yang sesuai. Total 84 file header disediakan.

Shell and Utilities (XCU) - daftar utilitas dan deskripsi shell, sh. Total 160 utilitas ditentukan.

System Interfaces (XSH) - berisi spesifikasi berbagai fungsi yang diimplementasikan sebagai panggilan sistem atau fungsi perpustakaan. Total 1123 antarmuka sistem ditentukan.

Rationale (XRAT) - penjelasan di balik standar.

Baris perintah pengguna standar dan antarmuka skrip adalah POSIX shell, ekstensi dari Bourne Shell berdasarkan versi awal Korn Shell.

Program, layanan, dan utilitas tingkat pengguna lainnya termasuk awk, echo, ed, vi, dan ratusan lainnya. Layanan tingkat program yang diperlukan mencakup layanan I / O (file, terminal, dan jaringan) dasar.

Test suite menyertai standar. Itu disebut PCTS atau POSIX Certification Test Suite.

Selain itu, SUS menyertakan spesifikasi CURSES (XCURSES), yang menentukan 372 fungsi dan 3 file header. Secara keseluruhan, SUSv3 menetapkan 1742 antarmuka.

Ini jelas merujuk secara khusus pada banyak komponen userland (seperti shell) yang sama sekali bukan bagian dari kernel linux. Jadi tidak mungkin linux.org et. Al. dapat memiliki kernel yang disertifikasi - dalam hal ini, ini bukan sistem operasi sama sekali. Mereka bisa, tentu saja, mencoba untuk mensertifikasi beberapa sistem tertentu menggunakan kernel, tetapi ini akan menjadi tidak berarti mengingat skema distribusi umum: kernel dan orang-orang yang memeliharanya adalah independen dari orang-orang yang mempertahankan core userland (GNU) yang independen dari orang-orang yang mempertahankan distribusi OS rakitan yang sebenarnya (Debian, Fedora, dll).

Saya kira Debian atau Fedora sendiri dapat terlibat dalam proses sertifikasi (jadi, misalnya, RedHat Enterprise bisa menjadi "unix bersertifikat"), tetapi ini menimbulkan pertanyaan bahwa hal itu sebenarnya diinginkan. Saya akan berasumsi bahwa alasan utama untuk sistem SUS adalah untuk menjalankan (skala komersial, non-konsumen) perangkat lunak yang ditulis untuk itu, yang sama sekali bukan ceruk linux - orang yang melakukan ini akan membayar ribuan dolar per lisensi untuk OS termasuk banyak dukungan, dll., karena mereka juga membayar puluhan atau ratusan ribu dolar per lisensi untuk perangkat lunak tambahan apa pun yang ingin mereka jalankan pada sistem. Linux dan outlier lainnya, di sisi lain, telah mengejar tujuan desain di luar kepatuhan sederhana untuk tujuan komersial, dan ada berbagai contohnya, misalnya (darihttp://en.wikipedia.org/wiki/STREAMS ):

STREAMS diperlukan untuk kesesuaian dengan Single UNIX Spesifikasi versi 1 (UNIX 95) dan 2 (UNIX 98), tetapi sebagai hasil dari penolakan pengembang BSD dan Linux untuk menyediakan STREAMS, [rujukan?] Ditandai sebagai opsional untuk POSIX kepatuhan oleh Grup Austin dalam versi 3 (UNIX 03).

Akomodasi menarik yang menyoroti titik bahwa SUS dan The Open Group! = Linux,! = BSD, dll.

goldilocks
sumber
2
Perhatikan bahwa sertifikasi berbeda dari kepatuhan. Sebagai contoh, tidak praktis bagi Linux Foundation untuk mendapatkan setiap versi kernel yang disertifikasi, karena biaya dan laju pengembangan. Tetapi itu tidak berarti (kernel) tidak sepenuhnya atau sebagian besar mematuhi.
strugee
2
@ strugee Standar POSIX tidak berlaku untuk atau tidak peduli dengan kernel. Apa yang distandarisasi adalah perintah (shell, ls, cat, ...) dan API (apa yang disediakan libc, utas). Apa yang membuat distribusi berbasis Linux seperti Unix sebagian besar adalah komponen GNU (perintah dan glibc). Kernel berada di luar lingkup sertifikasi / kepatuhan.
jlliagre
1
Bukan untuk membantah tetapi mengklarifikasi (saya mengulangi ini dari komentar saya pada jawaban illuminÉ): standarnya adalah "apa", kernelnya adalah "bagaimana". Saya hanya membaca sedikit demi sedikit standar, tapi saya tidak berpikir mereka merujuk ke "kernel" sama sekali (itu hanya "sistem"). Jadi sertifikasi dan kepatuhan WRT: itu adalah "apa" yang dilakukan kernel / OS, bukan "bagaimana" itu melakukannya.
goldilocks
3
@strugee Spesifikasi Single Unix berlaku untuk antarmuka pengguna. Kernel tentu saja akhirnya terlibat tetapi komentar saya adalah tentang pernyataan Anda tentang Linux Foundation yang mendapatkan sertifikasi kernel. Kernel tidak dapat disertifikasi, tidak ada semua komponen yang berinteraksi dengan proses sertifikasi. Apa yang dapat disertifikasi (atau paling tidak dicoba dibuat sesesuaian mungkin) adalah Sistem Operasi, yaitu apa yang biasa disebut distribusi di komunitas Linux.
jlliagre
2
@ strugee Itu mungkin menjadi alasannya namun bukan karena rollover cepat yang penting tetapi faktanya tidak ada komitmen untuk memastikan tidak ada perubahan yang tidak kompatibel ditambahkan. Sebagai contoh, Solaris 10 memenuhi persyaratan, menjamin kompatibilitas ini dan telah ada selusin pembaruan sejak itu bersertifikat Unix03. Selain itu, kombinasi Gnu / Linux mencoba untuk memenuhi persyaratan yang dapat / inginkan tetapi tidak lebih. Itu (hampir) tidak pernah berusaha untuk disertifikasi karena itu adalah proses yang mahal dan tidak akan mematuhinya karena beberapa persyaratan tidak ada (sengaja) dan beberapa ekstensi tidak kompatibel
jlliagre
12

Untuk memperluas jawaban pertama tentang POSIX, untuk memahami apa arti "seperti-unix", yah, yang pertama harus mencoba untuk memahami apa sebenarnya UNIX. Melihat dokumentasi dari Open Group , yang memiliki merek dagang Unix, Anda akan menemukan detail tentang evolusi spesifikasi Single UNIX - inilah UNIX03 :

Standar Produk UNIX 03 adalah tanda untuk sistem yang sesuai dengan Versi 3 dari Spesifikasi UNIX Tunggal. Ini adalah versi yang ditingkatkan secara signifikan dari Standar Produk UNIX 98. Perangkat tambahan wajib mencakup penyelarasan dengan ISO / IEC 9989: 1999 C Programming Language, IEEE Std 1003.1-2001 dan ISO / IEC 9945: 2002. Standar Produk ini mencakup Standar Produk wajib berikut: Panggilan dan Pustaka Sistem Internasionalisasi Extended V3, Perintah dan Utilitas V4, Bahasa C V2, dan Antarmuka Terminal Internasionalisasi.

UNIX98 :

Standar Produk UNIX 98 adalah versi yang ditingkatkan secara signifikan dari Standar Produk UNIX 95. Peningkatan wajib termasuk (1) antarmuka Threads, (2) Multibyte Support Extension (MSE), (3) Dukungan File Besar, (4) Dynamic Linking, (5) perubahan untuk menghapus dependensi atau batasan panjang data perangkat keras, dan (6) ) Tahun 2000 berubah. Selain itu, peningkatan tambahan opsional berikut disertakan: Fasilitas Administrasi Perangkat Lunak dan satu set API untuk dukungan waktu nyata. Standar Produk ini mencakup Standar Produk wajib berikut: Panggilan dan Pustaka Sistem Internasionalisasi Extended V2, Perintah dan Utilitas V3, Bahasa C, Layanan Transportasi (XTI) V2, Soket V2 dan Antarmuka Terminal Internasionalisasi. Selain itu, mungkin juga sesuai dengan Standar Produk Administrasi Perangkat Lunak.

UNIX95 (penekanan saya):

Standar Produk ini mendefinisikan platform terkonsolidasi untuk mendukung berbagai aplikasi yang awalnya dikembangkan untuk salah satu kelas sistem operasi yang berasal dari kode Sistem Operasi UNIX dan / atau antarmuka yang awalnya dikembangkan oleh AT&T , di samping fasilitas yang disediakan oleh Standar Produk Dasar. Ini memiliki cakupan yang lebih luas daripada Base. Standar Produk ini mencakup Standar Produk berikut ini: Panggilan dan Pustaka Sistem yang Diperluas secara Internasional, Perintah dan Utilitas V2, Bahasa C, Layanan Transportasi (XTI), Soket dan Antarmuka Terminal yang Diinternasionalkan.

Versi server standar menambahkan Internet Server dan IPv6 dalam beberapa kasus.

Jadi tentu saja kita melihat referensi ke AT&T Bell Laboratories dan bahasa C adalah jantung dari apa UNIX adalah: bahasa C, alat basis modular, dan shell dan bagaimana kernel, sistem file dan komponen OS kunci lainnya dirancang dan diimplementasikan .

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini

Di situlah buku Desain Sistem Operasi UNIX oleh Maurice J. Bach menjadi bacaan yang tak ternilai karena itu masalah sejarah pada saat ini. Dari catatan tentu saja adalah bagaimana ini terkait dengan penemuan lain seperti bahasa C memang. C dikembangkan oleh AT&T Bell untuk mengimplementasikan Unix dengan bahasa yang bisa secepat perakitan tetapi portabel di berbagai perangkat keras, dan banyak POSIX merupakan perluasan ke standar C.

Sejauh menyangkut kernel itu sendiri, Anda akan sering menemukan diagram konseptual seperti ini untuk menggambarkan apa yang dimaksud dengan kernel UNIX secara tradisional:

masukkan deskripsi gambar di sini

Berikut adalah beberapa kutipan dari buku klasik Mr Bach (1986) yang membahas dasar-dasar kernel UNIX System V:

Namun, mereka [subsistem aplikasi dan program] semuanya menggunakan layanan tingkat rendah yang pada akhirnya disediakan oleh kernel, dan mereka memanfaatkan layanan-layanan tersebut melalui serangkaian panggilan sistem. Ada sekitar 64 panggilan sistem dalam Sistem V, yang kurang dari 32 sering digunakan. Mereka memiliki opsi sederhana yang membuatnya mudah digunakan tetapi memberi pengguna banyak daya. Himpunan panggilan sistem dan algoritma internal yang mengimplementasikannya membentuk tubuh dari kernel [...]

[...] dua komponen utamanya adalah subsistem file dan subsistem proses.

File disusun dalam sistem file, yang diperlakukan sebagai perangkat logis; perangkat fisik seperti disk dapat berisi beberapa perangkat logis (sistem file). Setiap sistem file memiliki superblock yang menggambarkan struktur dan isi sistem file, dan setiap file dalam sistem file dijelaskan oleh inode yang memberikan atribut file. Panggilan sistem yang memanipulasi file melakukannya melalui inode. [dan kolam penyangga]

[...] Ada dua versi inode: salinan disk yang menyimpan informasi inode ketika file tidak digunakan dan salinan in-core yang merekam informasi tentang file yang aktif.

Eksekusi proses pengguna pada sistem UNIX dibagi menjadi dua tingkatan: pengguna dan kernel. Ketika suatu proses mengeksekusi panggilan sistem, mode eksekusi dari proses berubah dari mode pengguna ke mode kernel : sistem operasi mengeksekusi dan mencoba untuk melayani permintaan pengguna [...]

[...] filosofi sistem UNIX adalah untuk menyediakan primitif sistem operasi yang memungkinkan pengguna untuk menulis program modular kecil yang dapat digunakan sebagai blok bangunan untuk membangun program yang lebih kompleks. Salah satu seperti primitif terlihat shell pengguna adalah kemampuan untuk mengarahkan I / O .

[...] Selain melayani panggilan sistem, kernel melakukan pembukuan umum untuk komunitas pengguna, mengendalikan penjadwalan proses, mengelola penyimpanan dan perlindungan proses dalam memori utama, memotong interupsi, mengelola file dan perangkat, serta menangani kesalahan sistem kondisi.

Jika Anda tertarik dengan implementasi kernel yang berbeda di sistem operasi mirip unix, Anda juga dapat melihat implementasi FreeBSD (4.4BSD) atau di kernel Mach atau melihat perbandingan fitur-fiturnya.

Semakin banyak Anda tahu tentang desain UNIX, semakin Anda memahami apa yang terjadi dalam diagram berikut tentang nenek moyang UNIX dan sejarahnya . Mr Bach kebanyakan berbicara tentang Sistem V dalam bukunya, tetapi ia juga membahas BSD:

masukkan deskripsi gambar di sini

Ada lebih dari ini benar-benar memenuhi mata . Sebagai contoh, Mac OSX bersertifikat UNIX03 tetapi apakah Anda melihatnya terhubung ke UNIX murni (sebagian besar berwarna merah)?

masukkan deskripsi gambar di sini

Di atas Anda dapat melihat bagaimana kontribusi BSD, GNU, Microsoft dan beragam individu ke alam semesta ini. Meskipun GNU dan akhirnya linux tidak memiliki garis keturunan langsung ke UNIX, Anda melihat bahwa GNU adalah upaya untuk merekayasa ulang di dunia open source alat dan perangkat lunak dari UNIX komersial yang telah ditutup. Jadi melihat perangkat lunak yang dikelola GNU memberikan ide misalnya di aplikasi prototipe awal dan perpustakaan.

Perang lisensi memainkan peran dalam evolusi (dan terkadang stagnasi) UNIX. Anda dapat segera melihat bahwa UNIX berbaris sesuai dengan jenis lisensi - ditutup vs BSD ( BSD memungkinkan untuk membuat kode sumber tertutup ... lihat OSX) dan GPL yang memungkinkan Linux dan GNU untuk melengkapi diri mereka di dunia copyleft. Berikut adalah peta klasik dari kernel linux yang awalnya dikembangkan oleh Linus Torvalds, yang juga mengungkapkan apa yang kernel "dapat" berada dalam sistem operasi mirip Unix:

masukkan deskripsi gambar di sini

Ini mengisyaratkan gagasan bahwa tipe desain " kernel " bukanlah yang membuat standar UNIX atau apa yang mendefinisikan OS seperti-unix. Ini dibuktikan oleh fakta bahwa banyak OS mirip unix mungkin memiliki kernel monolitik atau microkernel - monolitik adalah tipe desain klasik untuk UNIX. Bahkan, bahkan di dalam UNIXes murni, HPUX memiliki kernel monolitik sedangkan AIX menggunakan microkernel. Ini perdebatan tentang desain adalah tentang kinerja dan tidak berhubungan dengan Unix keturunan atau identitas. Di sisi lain, ada pendekatan konseptual tradisional untuk menyediakan layanan untuk perangkat lunak, berurusan dengan sistem file dll di bawah sistem operasi UNIX / unix-like.

Saya percaya pertimbangan seperti itu akan menambah konteks ke bagian OS dari pertanyaan Anda.

Komunitas
sumber
3
+1 Beberapa poin bagus di sini: 1) Tentang hubungan antara C dan Unix (untuk menambahkan: C dikembangkan oleh AT&T Bell untuk mengimplementasikan Unix dengan bahasa yang bisa secepat perakitan tetapi portabel di perangkat yang berbeda, dan banyak POSIX adalah ekstensi ke standar C). 2) Desain kernel tidak tergantung pada standar. Standar adalah "apa", kernel adalah "bagaimana".
goldilocks
1
@goldilocks Terima kasih, saya telah menambahkan komentar Anda tentang C kata demi kata. Saya sudah mencoba menjelaskan bahwa pertimbangan kernel tidak terkait dengan standar. Pertanyaannya mengasumsikan bahwa ada sesuatu yang spesifik tentang kernel unix-like tetapi tidak ada. Di sisi lain secara historis kernel Unix pertama mungkin dengan cara ini dan itu. Pemahaman saya terbatas, tetapi saya menganggap kernel telah banyak berubah karena perangkat keras telah banyak berubah sejak tahun 70-an. Yang jelas adalah bahwa kernel tidak mendefinisikan Unix / unix-like, pikir kernel linux dengan jelas mendefinisikan GNU / Linux atau Linux.