Inspeksi tumpukan diperlukan karena program pada JVM dan CLR memiliki akses default ke operasi berbahaya, jadi sesuatu harus dilakukan untuk mencegah bencana. Sebagai contoh, sebuah program yang tidak dipercaya dapat merujuk pustaka I / O dan menyebutnya:
using IO;
...
IO.DeleteFile("/home/foo/bla");
Jadi pada setiap operasi berbahaya yang dilakukan, kita perlu memeriksa apakah diizinkan. Dengan inspeksi tumpukan biasanya rumit untuk memahami siapa yang mendapatkan akses ke apa. Ini juga membuat optimisasi seperti inlining dan panggilan ekor sulit.
Mekanisme superior adalah untuk tidak memberikan setiap program akses otomatis ke operasi berbahaya sejak awal. Dalam model ini tidak ada cara untuk mengimpor perpustakaan IO. Satu-satunya cara untuk mendapatkan akses ke perpustakaan IO adalah jika orang lain memberikannya kepada Anda. Ini disebut kapabilitas keamanan. Pengantar dapat ditemukan di sini .
Sebagai gantinya, kami akan menulis program sebelumnya seperti ini:
Main(IOLibrary IO){
IO.DeleteFile("/home/foo/bla");
}
Pustaka IO adalah parameter ke titik masuk program, dan ini disebut kemampuan (karena memberikan penggunaan beberapa kemampuan, dalam hal ini untuk melakukan IO). Untuk dapat menjalankan program ini, kita harus memiliki akses ke kemampuan IO sendiri, dan menjalankan program dengan menelepon Main(ourIOlibrary)
. Jika kita menjalankan program yang tidak tepercaya, kita hanya tidak meneruskan pustaka IO kita ke sana, karena mungkin menggunakan pustaka itu untuk menghapus file kita. Dalam beberapa kasus kami ingin memberikan akses terbatas ke program filesystem yang tidak terpercaya. Dalam hal ini kami membuat pembungkus di sekitar pustaka IO kami sendiri yang hanya memungkinkan akses ke direktori tertentu, dan meneruskannya ke program yang tidak dipercaya alih-alih pustaka IO lengkap
Jadi jika kita memerlukan kemampuan IO untuk menjalankan program yang membutuhkan kemampuan IO, itu juga berarti bahwa apa pun yang dipanggil program kita harus memiliki akses ke kemampuan IO untuk dapat memberikannya kepada kita. Jadi dari mana kemampuan IO-nya berasal? Ya, pada akhirnya ada titik di mana manusia yang mengoperasikan komputer memanggil sebuah program. Manusia ini memiliki akses ke semua kemampuan sistem, sehingga ia dapat meneruskan kemampuan IO. Jika manusia ini tidak mempercayai program yang dia jalankan, maka dia tidak akan meneruskan kemampuan IOnya untuk itu.
Anda mungkin dapat dengan mudah membayangkan jenis-jenis kemampuan lain: akses internet, akses untuk menggambar barang-barang di layar Anda, dll. Misalnya sistem pengaya peramban yang aman mungkin memberikan kemampuan grafis pada pengaya yang tidak dipercaya yang hanya memungkinkannya untuk melukis gambar dalam sebuah persegi panjang yang telah ditentukan sebelumnya. di halaman.