Virtualisasi tingkat OS (wadah) untuk OS X

31

Saya bertanya-tanya mengapa, terlepas dari chroot lama yang baik, tidak ada implementasi virtualisasi tingkat sistem operasi (atau wadah jika Anda mau) ada untuk Mac OS X.

Mungkinkah itu karena keterbatasan kernel atau pembatasan lisensi? Atau memang belum ada yang meluncurkan proyek serupa?

Emyl
sumber

Jawaban:

16

Elemen kunci yang diperlukan untuk kontainerisasi adalah isolasi jaringan dan layanan lainnya, tetapi tidak hanya isolasi tetapi juga virtualisasi . FreeBSD Jails, "wadah" Linux (atau lebih tepatnya "ruang nama"), dan zona Solaris / illumos semuanya menawarkan beberapa tingkat "virtualisasi" layanan sistem sistem operasi ini.

Dengan virtualisasi, ini berarti bahwa server ini tersedia (atau berpotensi tersedia ) untuk hal-hal di dalam "wadah", tetapi dengan cara yang melindungi hal-hal lain pada host yang sama di luar wadah. (Misalnya, sebuah wadah mungkin memiliki tumpukan TCP / IP sendiri, dengan alamat IP sendiri, cache ARP, dll.)

Virtualisasi OS (sistem operasi) adalah bagaimana kita umumnya merujuk pada jenis virtualisasi "ringan" ini, di mana proses berpikir mereka melihat kernel virtual, tetapi semuanya berbagi kernel nyata yang sama di bawah tenda; kernel yang bertindak sebagai semacam hypervisor dalam memastikan bahwa batas-batas kontainer / virtualisasi tidak dilintasi. (Dengan kata lain, layanan OS tervirtualisasi.) Bandingkan ini dengan virtualisasi perangkat keras, di mana yang divirtualisasikan adalah perangkat keras - mis. Perangkat ditiru dalam perangkat lunak dan disajikan ke sistem operasi yang berjalan dalam wadah. Ini sangat kuat, tetapi cukup banyak sumber daya - setiap mesin virtual harus memiliki salinan sistem operasinya sendiri.

MacOS baru-baru ini memiliki dukungan hypervisor asli melalui Hypervisor.framework yang memungkinkan perangkat lunak seperti "XHyve" [Port dari FreeBSD's BHyve] (buruh pelabuhan pada macOS menggunakan ini), tetapi tidak memiliki layanan yang diperlukan di bawah tenda untuk sepenuhnya memvirtualisasi layanan sistem operasi.

Sebenarnya, banyak dari apa yang dibutuhkan mungkin sudah ada, karena pekerjaan untuk menyediakan kotak pasir berarti bahwa sudah ada poin logis di mana panggilan sistem dicegat dan ditangani secara berbeda untuk aplikasi yang berbeda. Namun, itu jauh dari cerita lengkap - menerapkan jaringan terpisah yang benar, IPC, dan ruang nama lain cukup banyak pekerjaan.

Alasan terbaik mengapa Apple tidak melakukan ini kemungkinan alasan yang sama bahwa Apple belum merilis platform yang cocok untuk menjalankan macOS di pusat data selama bertahun-tahun - kurangnya permintaan pasar, atau persepsi kurangnya permintaan pasar oleh kepemimpinan Apple. Fokus desktop dan seluler di mana mereka memusatkan perhatian mereka sama sekali tidak membutuhkan instance macOS virtual sebanyak itu. (Ini menyedihkan, karena saya ingin memiliki dukungan macOS virtual - misalnya menjalankan macOS di VM di Travis CI benar-benar memakan waktu dibandingkan dengan wadah Linux).

Garrett D'Amore
sumber
1
jawaban yang bagus ... tebakan saya adalah Apple menghindari mendukung OSX di server karena itu akan meruntuhkan pasar MBP mereka jika pengembang iOS dapat menjalankan laptop linux kuat yang murah dan mengkompilasi apk mereka pada penyedia hosting VPS
Scott Stensland
6

Anda akan terkejut - Wadah sebenarnya yang didukung - OS X (dan iOS) Sandbox telah berkembang untuk menggunakannya. Mereka telah diperkenalkan di 10.7, dan sekarang standar de facto di 10.10 dan iOS 8. Pada yang terakhir mereka lebih ketat ditegakkan (terutama karena alasan keamanan aplikasi), ke titik di mana aplikasi hanya dapat melihat sendiri, dan sebelumnya metode enumerasi proses atau sumber daya sekarang mengembalikan hasil berbasis wadah - mirip dengan Linux ipc namespace - tetapi lebih kuat.

Technologeeks
sumber
2
Ini adalah kotak pasir, bukan virtualisasi OS (misalnya wadah, zona, penjara), kan?
smdvlpr
1
Docker juga bukan virtualisasi. Kontainer! = VMs. Docker pada dasarnya memalsukan banyak fitur kernel, cgroup, chroot, sistem file berlapis, perutean iptables dan sebagainya, untuk mengisolasi sekelompok proses sehingga aplikasi melihat dirinya memiliki sistem untuk dirinya sendiri, sementara mengisolasi lingkungan tersebut untuk meningkatkan keamanan dan meminimalkan kemampuan wadah untuk ikut campur satu sama lain dan sistem. Wadah OSX mencapai beberapa fungsi ini, tetapi tidak semua. Ini mungkin sesuatu yang bisa diimplementasikan oleh pembuat kode yang cukup licik.
Shayne
3
@ Technologeeks, dapatkah Anda menunjuk ke materi referensi tentang wadah / kotak pasir di OS X?
Ken Williams
3

Saya akan membayangkan jawabannya adalah tidak ada yang benar-benar menginginkannya. Tampaknya bisa dilakukan. Hal-hal ini dilakukan terutama untuk satu tujuan, melestarikan kinerja untuk vendor VPS. Dan benar-benar tidak ada yang menginginkan instance VPS berbasis OS X.

Shane Hsu
sumber
5
Terima kasih atas poin Anda. IMHO setidaknya ada kasus penggunaan lain untuk wadah, yaitu menciptakan lingkungan pengembangan. BTW, saya juga menemukan api tua ini: groups.google.com/forum/#!topic/darwin-dev/6-FP9GCsBG4
Emyl
Peningkatan kepadatan adalah efek samping yang bagus dari proses isolasi ke ruang nama mereka sendiri. Kontainer memungkinkan Anda menjalankan beberapa aplikasi lebih aman dan memiliki kontrol yang lebih besar atas apa yang dapat mereka lakukan pada mesin. Manfaat ini digunakan oleh iOS untuk meningkatkan keamanan dan menjaga aplikasi tidak saling menginjak, misalnya, yang tidak ada hubungannya dengan kepadatan VPS. Bahkan mesin dengan layanan tunggal dapat memanfaatkan keamanan. Tidak ada peningkatan kepadatan di sana tetapi wadah masih bisa bermanfaat.
GargantuChet
2

Sementara itu menggunakan "good old chroot (8)", saya memulai sebuah proyek yang cenderung meniru perilaku buruh pelabuhan pada OS X dan NetBSD. Ini adalah Free-as-in-speech dan tersedia di GitHub . Seperti yang dikatakan README, proyek ini bukan tentang keamanan atau produksi, tetapi akan membantu menguji tumpukan penuh secara native di workstation Anda.

iMil
sumber
0

buruh pelabuhan (seperti yang saya mengerti) hanya "virtualisasi" (layering) sistem file dan jaringan (cpu / mem hanya terbatas) sehingga semua fitur yang sama harus ada tetapi tidak dipasarkan dengan cara yang sama.

moe
sumber