Apa sebenarnya POSIX?

139

Saya melihat POSIX sering disebutkan dan di mana-mana, dan saya menganggapnya sebagai standar UNIX standar .. sampai saya perhatikan kutipan berikut pada halaman Wikipedia: Grup Terbuka

Open Group paling terkenal sebagai badan sertifikasi untuk merek dagang UNIX, dan penerbitan standar teknis Spesifikasi Tunggal UNIX , yang memperluas standar POSIX dan merupakan definisi resmi sistem UNIX .

Jika definisi resmi sistem UNIX adalah perpanjangan dari POSIX, lalu apa sebenarnya POSIX? ,,, Ini sepertinya menjadi batu ujian bagi dunia UNIX, tapi saya tidak tahu bagaimana itu cocok dengan gambaran keseluruhan.

Peter.O
sumber
2
SUS adalah definisi resmi UNIX karena The Open Group, bukan IEEE, memiliki merek dagang UNIX. Lihat jawaban saya di bawah ini.
penguin359
stackoverflow.com/questions/1780599/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Jawaban:

125

POSIX pertama adalah standar pada tahun 1988 jauh sebelum Spesifikasi UNIX Tunggal. Itu adalah salah satu upaya menyatukan semua garpu UNIX dan sistem seperti UNIX. POSIX adalah Standar IEEE, tetapi karena IEEE tidak memiliki merek dagang UNIX®, standarnya bukanlah UNIX® meskipun didasarkan pada API UNIX yang ada saat itu. Standar pertama POSIX.1 secara resmi dikenal sebagai IEEE std 1003.1-1988. [ 1 ] IEEE membebankan biaya besar untuk mendapatkan salinan standar.

Open Group merilis Spesifikasi Tunggal UNIX (SUSv2) pada tahun 1997 berdasarkan karya IEEE dari standar POSIX. SUSv3 dirilis pada tahun 2001 dari kelompok kerja bersama antara IEEE dan Grup Terbuka yang dikenal sebagai Grup Austin. SUSv3 juga dikenal sebagai POSIX: 2001 [ 2 ]. Sekarang ada juga POSIX: 2004 dan POSIX: 2008 yang merupakan inti dari SUSv4. Mengenai UNIX®, UNIX® adalah apa pun yang dikatakan oleh pemegang merek dagang terdaftar saat ini. Sejak 1994, itulah The Open Group.

Novell memperoleh bisnis sistem UNIX® dari AT&T / USL yang merupakan tempat kelahiran UNIX®. Pada tahun 1994, mereka menjual hak atas merek dagang UNIX® kepada X / Open [ 3 ] yang sekarang dikenal sebagai Grup Terbuka. Mereka kemudian menjual kode sumber UNIX® ke SCO sebagai UNIXWARE®. [ 3 ] UNIX® sendiri telah berkali-kali bercabang [ 4 ] [ 5 ] sebagian karena model lisensi AT&T. Membeli UNIX® memberi Anda sumber lengkap sistem operasi dan rantai alat lengkap untuk membangunnya. Modifikasi ke sumber dapat didistribusikan dan digunakan oleh siapa saja yang memiliki lisensi untuk UNIX® dari AT&T. Biaya lisensi mencapai ribuan.

BSD adalah proyek di Berkeley yang menambahkan sejumlah perangkat tambahan ke sistem operasi UNIX®. Kode BSD dirilis di bawah lisensi yang jauh lebih liberal daripada sumber AT&T dan tidak memerlukan biaya lisensi atau bahkan persyaratan untuk didistribusikan dengan sumber, tidak seperti GPL yang digunakan oleh Proyek GNU dan Linux. Ini telah menyebabkan sebagian besar kode BSD disertakan dengan berbagai garpu UNIX komersial. Sekitar 4.3BSD, mereka hampir mengganti semua kebutuhan untuk kode sumber AT&T UNIX® asli. FreeBSD / NetBSD / OpenBSD adalah semua garpu dari 4.3BSD yang merupakan sistem operasi lengkap dan tidak memiliki kode sumber AT&T asli. Mereka juga tidak memiliki hak atas merek dagang UNIX®, tetapi sebagian besar kode mereka digunakan oleh sistem operasi UNIX komersial.

Linux dikembangkan pada tahun 1991, tetapi dikembangkan dari awal tidak seperti BSD dan menggunakan Proyek GNU yang ada yang merupakan implementasi ruang bersih dari banyak ruang pengguna UNIX. Ini mengimplementasikan banyak POSIX untuk kompatibilitas dan mirip dengan UNIX dalam desain, tetapi tidak memiliki koneksi dekat dengan AT&T atau UNIX® yang dimiliki oleh BSD.

penguin359
sumber
1
Sebuah jawaban yang bagus .. semua (3) jawaban sudah bagus, tetapi jawaban ini sangat informatif (terutama setelah disiapkan oleh 2 lainnya); hanya apa yang saya butuhkan ... dan terima kasih atas komentar (di bawah tubuh pertanyaan) tentang SUS, saya memahaminya dengan cukup baik sekarang, terima kasih ... (dan saya tidak melihat itu hanya satu paragraf ... Itu terlalu menarik :)
Peter.O
2
@Mikel semoga hasil edit saya sedikit membantu
penguin359
1
Itu jawaban yang fantastis di sana @ penguin359!
boehj
Adakah yang punya ide bagus tentang X? Jika itu hanya sufiks untuk menunjukkan hubungan dengan Unix, bukankah seharusnya huruf kecil?
Alex W
Luar biasa. Terima kasih. Saya telah menghitung banyak sejarah itu, tetapi detail "gosip" tentang bagaimana hal-hal terjadi bukanlah sesuatu yang saya fokuskan. Bagus untuk melihat jejaknya.
Ken Ingram
55

Hal terpenting yang didefinisikan POSIX 7

  1. API C

    Sangat memperluas ANSI C dengan hal-hal seperti:

    • operasi file lebih: mkdir, dirname, symlink, readlink, link(hardlinks), poll(), stat, sync,nftw()
    • Proses dan benang: fork, execl, wait, pipe, semaphors sem_*, memori bersama ( shm_*), kill, parameter penjadwalan ( nice, sched_*), sleep, mkfifo,setpgid()
    • jaringan: socket()
    • manajemen memori: mmap, mlock, mprotect, madvise,brk()
    • utilitas: ekspresi reguler ( reg*)

    API tersebut juga menentukan konsep sistem yang mendasari di mana mereka bergantung, misalnya forkmembutuhkan konsep proses.

    Banyak panggilan sistem Linux ada untuk melaksanakan fungsi API POSIX C tertentu dan membuat Linux compliant, misalnya sys_write, sys_read... Banyak dari mereka syscalls juga memiliki ekstensi Linux-spesifik namun.

    Implementasi desktop utama Linux: glibc, yang dalam banyak kasus hanya menyediakan pembungkus dangkal untuk panggilan sistem.

  2. Utilitas CLI

    Misalnya: cd, ls, echo, ...

    Banyak utilitas adalah ujung depan shell langsung untuk fungsi API C yang sesuai, misalnya mkdir.

    Implementasi besar desktop Linux: GNU Coreutils untuk yang kecil, proyek GNU terpisah untuk orang-orang besar: sed, grep, awk, ... Beberapa utilitas CLI dilaksanakan oleh Bash sebagai built-in .

  3. Bahasa shell

    Misalnya, a=b; echo "$a"

    Implementasi desktop utama Linux: GNU Bash .

  4. Variabel lingkungan

    Misalnya: HOME, PATH.

    PATH semantik pencarian ditentukan , termasuk bagaimana garis miring mencegah PATHpencarian .

  5. Status keluar program

    ANSI C mengatakan 0atau EXIT_SUCCESSuntuk kesuksesan, EXIT_FAILUREuntuk kegagalan, dan membiarkan implementasi sisanya didefinisikan.

    POSIX menambahkan:

    • 126: perintah ditemukan tetapi tidak dapat dieksekusi.

    • 127: perintah tidak ditemukan.

    • > 128: diakhiri oleh sinyal.

      Tapi POSIX tampaknya tidak menentukan 128 + SIGNAL_IDaturan yang digunakan oleh Bash: Kode keluar default saat proses dihentikan?

  6. Ekspresi reguler

    Ada dua jenis: BRE (Dasar) dan ERE (Diperpanjang). Dasar sudah usang dan hanya disimpan agar tidak merusak API.

    Itu diimplementasikan oleh fungsi C API, dan digunakan di seluruh utilitas CLI, mis. grepMenerima BRE secara default, dan ERE dengan -E.

    Misalnya: echo 'a.1' | grep -E 'a.[[:digit:]]'

    Implementasi Linux utama: glibc mengimplementasikan fungsi-fungsi di bawah regex.h yang mana program suka grepgunakan sebagai backend.

  7. Struktur direktori

    Misalnya: /dev/null,/tmp

    Linux FHS sangat memperluas POSIX.

  8. Nama file

    • / adalah pemisah jalur
    • NUL tidak dapat digunakan
    • .adalah cwd, ..orang tua
    • nama file portabel
      • gunakan maksimal maksimal 14 karakter dan 256 untuk path lengkap
      • hanya dapat berisi: a-zA-Z0-9._-

    Lihat juga: https://stackoverflow.com/questions/18550253/what-is-posix-compliance-for-filesystem

  9. Konvensi API utilitas baris perintah

    Tidak wajib, digunakan oleh POSIX, tetapi hampir tidak ada di tempat lain, terutama di GNU. Tapi benar, itu terlalu ketat, misalnya hanya bendera huruf tunggal (mis. -a), Tidak ada versi panjang tanda hubung ganda (mis --all.).

    Beberapa konvensi yang banyak digunakan:

    • - berarti stdin tempat file diharapkan
    • --mengakhiri flags, misalnya ls -- -luntuk daftar direktori bernama-l

    Lihat juga: https://stackoverflow.com/questions/8957222/are-there-standards-for-linux-command-line-switches-and-arguments

  10. "POSIX ACLs" (Daftar Kontrol Akses), misalnya seperti yang digunakan sebagai backend untuk setfacl.

    Ini telah ditarik tetapi diimplementasikan di beberapa OS, termasuk di Linux dengan Linuxsetxattr .

Siapa yang sesuai dengan POSIX?

Banyak sistem mengikuti POSIX dengan seksama, tetapi hanya sedikit yang benar-benar disertifikasi oleh Grup Terbuka yang mempertahankan standar. Yang tersertifikasi termasuk:

Kebanyakan distro Linux sangat patuh, tetapi tidak bersertifikat karena mereka tidak ingin membayar cek kepatuhan. K-UX Inspur dan Huawei EulerOS adalah dua contoh yang disertifikasi.

Daftar resmi sistem bersertifikat dapat ditemukan di: https://www.opengroup.org/openbrand/register/ dan juga di halaman wiki .

Windows

Windows menerapkan POSIX pada beberapa distribusi profesionalnya.

Karena ini adalah fitur opsional, pemrogram tidak dapat mengandalkannya untuk sebagian besar aplikasi pengguna akhir.

Dukungan sudah tidak digunakan lagi di Windows 8:

Pada tahun 2016, sebuah API mirip Linux resmi yang disebut "Windows Subsystem for Linux" diumumkan. Ini termasuk panggilan sistem Linux, ELF berjalan, bagian dari /procfilesystem, Bash, GCC, (TODO kemungkinan glibc?), apt-getDan banyak lagi: https://channel9.msdn.com/Events/Build/2016/P488 jadi saya percaya itu akan memungkinkan Windows untuk menjalankan banyak, jika tidak semua, POSIX. Namun, ini difokuskan pada pengembang / penyebaran bukan pengguna akhir. Secara khusus, tidak ada rencana untuk mengizinkan akses ke GUI Windows.

Tinjauan historis kompatibilitas Microsoft POSIX resmi: http://brianreiter.org/2010/08/24/the-sad-history-of-the-microsoft-posix-subsystem/

Cygwin adalah proyek pihak ketiga GPL terkenal untuk itu "menyediakan fungsionalitas POSIX API substansial" untuk Windows, tetapi mengharuskan Anda "membangun kembali aplikasi Anda dari sumber jika Anda ingin itu berjalan pada Windows". MSYS2 adalah proyek terkait yang tampaknya menambahkan lebih banyak fungsi di atas Cygwin.

Android

Android memiliki perpustakaan C sendiri (Bionic) yang tidak sepenuhnya mendukung POSIX pada Android O: https://stackoverflow.com/questions/27604455/is-android-posix-compatible

Tingkat bonus

The Linux Standard Base lebih lanjut memperluas POSIX.

Gunakan indeks non-frame, mereka jauh lebih mudah dibaca dan dicari: http://pubs.opengroup.org/onlinepubs/9699919799/nfindex.html

Dapatkan versi penuh zip dari halaman HTML untuk memahami: https://stackoverflow.com/questions/453993/is-there-a-listing-of-the-posix-api-functions/45832939#45832939

Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
sumber
Pertanyaannya adalah tentang POSIX dan SUS, tetapi jawaban ini tidak menyebutkan SUS sama sekali ...
Kidburla
1
@ Kidburla kesempatan besar untuk menambahkan jawaban Anda sendiri dan mendapatkan beberapa rep :-) (atau mengeditnya menjadi milikku dan memberi saya rep hehe)
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
@ phuclv terima kasih, saya telah menambahkan itu ke jawabannya.
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
16

POSIX adalah standar Sistem Operasi Portabel. Ini menjelaskan utilitas, API, dan layanan tertentu yang harus disediakan oleh sistem operasi yang sesuai untuk perangkat lunak (misalnya soket, file I / O dan threading) bersama dengan konvensi tentang bagaimana ini harus dipanggil dari suatu program.

Idenya adalah bahwa sebuah program yang ditulis untuk satu OS yang Memenuhi Syarat POSIX akan lebih mudah untuk port ke OS yang sesuai dengan POSIX daripada melakukan porting antara OS yang tidak sesuai dengan POSIX. Inilah sebabnya mengapa lebih mudah untuk mem-port aplikasi dari, katakanlah, FreeBSD ke Linux daripada port dari FreeBSD ke Windows (meskipun Windows seolah-olah mendukung subset POSIX.)

Andrew Lambert
sumber
14

POSIX adalah subset dari UNIX yang dimaksudkan untuk mencakup berbagai lingkungan seperti Unix untuk sistem operasi lain; ini awalnya termasuk lingkungan seperti Eunice untuk VMS, kepribadian POSIX Windows NT, dan Apollo Domain / OS. Anda dapat menganggapnya sebagai API portabilitas standar untuk subset dari layanan sistem operasi yang perilakunya sama antara Unix dan non-Unix. Lihat http://standards.ieee.org/develop/wg/POSIX.html untuk informasi lebih lanjut.

geekosaurus
sumber
Saya sudah membaca lebih lanjut tentang hal itu sekarang, dan tampaknya Uinx adalah ayam dan POSIX adalah telur .. tapi saya bertanya-tanya apakah UNIX masih berkuasa, yaitu .. Apakah POSIX memiliki kehidupan sendiri sekarang, dan UNIX harus mematuhi POSIX? ... btw. tampaknya nama POSIX dibuat oleh Richard Stallman ....
Peter.O
@ fred.bear: Jawaban singkat: UNIX (merek dagang) harus sesuai dengan POSIX; Unix (produk) adalah dasar utama untuk POSIX; unices (keluarga OS) sebagian besar sesuai tetapi memiliki lebih banyak kesamaan. Lihat Apakah Linux itu Unix? dan Apakah Mac OS X, UNIX? untuk diskusi terkait.
Gilles
@ fred-bear Banyak orang berpendapat bahwa standar POSIX saat ini dipandu oleh komunitas pengembangan kernel Linux, yang (jika benar) IMHO bukanlah hal yang baik ...
sakisk
1
@faif Saya belum pernah mendengar ini dan merasa tidak mungkin, dapatkah Anda mengirim referensi?
penguin359
2
@Gilles Grup Terbuka, pemilik merek dagang UNIX® juga bertanggung jawab atas sertifikasi dan spesifikasi UNIX® yang mereka sebut Spesifikasi UNIX Tunggal atau SUS. POSIX dikembangkan oleh IEEE yang tidak bertanggung jawab atas UNIX®. Sejak tahun 2001, mereka telah dikembangkan sebagian besar dalam sinkronisasi, tetapi secara teknis SUS yang sekarang pada versi 4 yang mendefinisikan UNIX®.
penguin359