NodeOS: Sistem Operasi Berbasis JavaScript

Diterbitkan: 2022-03-11

Saya yakin sebagian besar programmer pernah mendengar tentang Node.js, tapi bagaimana dengan NodeOS? Ya, NodeOS, sistem operasi yang ditulis dalam Node.js. Yah, semacam. NodeOS menggunakan kernel Linux untuk sebagian besar hal-hal penting kinerja seperti, misalnya, interaksi perangkat keras, tetapi untuk yang lainnya menggunakan Node.js. Pengembangan NodeOS dimulai dua tahun lalu dan dibuat oleh orang-orang yang berbagi ide sederhana namun menarik: "Apakah mungkin membuat sistem operasi hanya menggunakan Node.js?"

Bagan evolusi Darwin

Apakah mungkin membuat sistem operasi hanya menggunakan Node.js?
Menciak

Apa masalahnya?

Pertama-tama, pikirkan tentang kemajuan yang telah dicapai Node.js dalam waktu singkat. Sekarang, pikirkan hal yang sama terjadi dengan sistem operasi. Kemudian, mari tambahkan beberapa hal keren ke dalamnya.

Sistem file root independen dan terisolasi per pengguna

NodeOS memperkenalkan paradigma yang menarik: Jika semua pengguna memiliki sistem file yang terisolasi, ini memberi mereka hierarki sistem file yang sederhana untuk digunakan. Karena "folder rumah" mereka sebenarnya adalah akar dari hierarki sistem file mereka sendiri, mereka dapat menginstal paket secara global tanpa memerlukan izin khusus dan tidak perlu mengonfigurasi apa pun karena mereka diinstal di direktori home mereka secara default. Juga, ini memberikan banyak keamanan; jika seorang peretas menemukan cara untuk masuk ke dalam akun tertentu di sistem operasi, satu-satunya partisi yang dapat dia akses adalah partisi pengguna tersebut. Hasil akhirnya adalah peretas tidak dapat mengkompromikan seluruh sistem.

Node.js dan NPM

Jika dipikir-pikir, sistem operasi yang menggunakan Node.js berarti bahwa paket apa pun yang tersedia di NPM, pada saat yang sama, juga merupakan paket NodeOS. Pada saat penulisan, ada 210.735 paket; karena jumlah paket NPM bertambah setiap menit, maka tidak aneh jika dalam beberapa tahun NodeOS memiliki sejuta aplikasi.

Ini didasarkan pada kernel Linux

Ini mungkin tidak tampak seperti masalah besar, tetapi Linux adalah sistem operasi server yang paling banyak digunakan. Karena NodeOS didasarkan pada kernel Linux, Anda dapat menjalankan setiap aplikasi yang ditulis untuk distribusi Linux lainnya dengan sedikit perubahan.

Kekurangannya

Sebanyak saya ingin NodeOS yang sudah jadi, itu belum ada. Masih banyak fungsi kunci yang hilang untuk sistem operasi server. Misalnya, seluruh perangkat BASH tidak ada, termasuk ps, tail, nano, dan grep. Selain itu, Anda tidak dapat menjalankannya sebagai sistem operasi desktop karena tidak memiliki GUI. Tentu, Anda dapat menerapkan beberapa fitur yang hilang dengan cukup mudah menggunakan sedikit JavaScript, tetapi faktanya semua fitur yang disebutkan tidak tersedia secara default, itu tidak baik.

Jadi, bagaimana saya bisa mencoba NodeOS?

Menggunakan Docker

Cara termudah dan tercepat untuk mencoba NodeOS adalah dengan menggunakan yang berikut ini:

  1. Komputer dengan Mac OSX atau Linux. Ini mungkin bekerja dengan Windows, tetapi saya tidak mencobanya.
  2. Buruh pelabuhan.

Setelah Anda menginstal Docker, menjalankan instance NodeOS itu mudah. Yang perlu Anda lakukan adalah menjalankan perintah berikut, dan Docker melakukan semua keajaiban:

 sudo docker run -t -i nodeos/nodeos 

Cara termudah dan tercepat untuk mencoba NodeOS adalah dengan menggunakan Docker

Cara termudah dan tercepat untuk mencoba NodeOS adalah dengan menggunakan Docker.
Menciak

Saat Anda menjalankan perintah yang disebutkan di atas, Docker secara otomatis mengunduh disk image untuk NodeOS dari repositori dan melakukan instalasi NodeOS di dalam mesin virtual. Setelah instalasi selesai, itu membuka sesi SSH ke shell NodeOS.

Tanpa buruh pelabuhan

Ada beberapa alasan mengapa Anda ingin menghindari penggunaan Docker, dan salah satunya adalah versi NodeOS terbaru. Pada saat penulisan, perubahan terakhir pada gambar Docker dari NodeOS dilakukan dua bulan lalu, sedangkan versi pengembangan diperbarui enam hari lalu. Jadi, jika Anda ingin menggunakan versi terbaru, Anda harus mendapatkan kode sumbernya. Itu tidak terlalu sulit, tetapi butuh waktu lama. Anda akan perlu:

  1. Komputer dengan Linux. Anda dapat mengompilasinya di OS X, tetapi akan memakan waktu lebih lama karena harus membuat kompilasi silang. Hal yang sama berlaku untuk Windows.
  2. Utilitas build Linux (make, g++, gcc, autoconf).
  3. kemu.
  4. Waktu. Serius, banyak.

Setelah Anda memiliki semuanya, Anda dapat melanjutkan dengan kompilasi kode sumber:

  1. Unduh kode sumber proyek: bash git clone [email protected]:NodeOS/NodeOS.git .
  2. Kompilasi dengan menjalankan perintah berikut: cd NodeOS dan npm install .
  3. Saya akan mengutip, kata demi kata, dokumentasi resmi: “Pilih popcorn microwave dan pergi menonton film. Tidak, sungguh, lakukanlah.” . Ya, itu akan memakan banyak waktu, jadi lakukan sesuatu yang menarik sementara itu.
  4. Jalankan bash npm start untuk menjalankan NodeOS di dalam Qemu.

Apakah itu bekerja?

Setelah instalasi selesai, kita dapat memeriksa apakah itu berfungsi dengan mengeksekusi di dalam shell NodeOS perintah ls . Output seperti ini akan muncul:

 [ 'etc', 'lib', 'lib64', 'root', 'bin', 'sys', 'usr', 'share', 'proc' ]

Jika ya, itu berarti beberapa perintah dasar berfungsi. Tapi, bagaimana jika kita ingin menampilkan alamat IP kartu jaringan? Di Linux, ada perintah bernama ifconfig yang melakukan hal itu; mari kita coba:

 command not found: ifconfig

Sepertinya perintah ifconfig hilang. Itu karena NodeOS tidak memiliki perintah ifconfig default. Sekarang apa? Yah, itu sederhana; NodeOS memiliki manajer paket terintegrasi (seperti apt atau yum ), yang disebut npkg , yang didasarkan pada NPM Node dan mudah digunakan. Menginstal ifconfig semudah menjalankan perintah berikut:

 npkg install bin-ifconfig

Jika semuanya berjalan dengan baik, perintah ifconfig sekarang seharusnya sudah tersedia di shell. Jika kami mencoba menjalankannya lagi, output seperti ini muncul (saya memasukkan alamat MAC dan alamat IP acak untuk alasan yang jelas):

 eth0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500 ether 01:23:45:67:89:ab inet6 f0cd::ef01:0203:0405:181%en1 prefixlen 64 scopeid 0x5 inet 192.168.0.21 netmask 0xffffff00 broadcast 192.168.0.21 nd6 options=1<PERFORMNUD> media: autoselect status: active

Jika output Anda terlihat seperti itu, maka itu berfungsi. Anda telah berhasil menginstal aplikasi NodeOS pertama Anda: ifconfig .

Ini bekerja. Namun, apa yang kita lakukan sekarang dengan OS?

Apa gunanya memiliki sistem operasi yang ditulis dalam Node.js jika Anda dapat melakukan hal yang sama (atau bahkan lebih sedikit) yang dapat Anda lakukan di Ubuntu atau distribusi Linux lainnya? Intinya adalah semuanya dikembangkan dengan menggunakan tidak lebih dari Node.js. Ini juga berarti kita dapat mengembangkan aplikasi kita menggunakan tidak lebih dari Node.js. Misalnya, NodeOS tidak memiliki implementasi default untuk perintah man , yang digunakan di Linux untuk menampilkan halaman manual dari perintah lain. Jangan takut, menerapkannya mudah. Bagaimana, saya mendengar Anda bertanya? Sederhana.

Membangun aplikasi NodeOS dengan Node.js

Pertama, mari kita instal editor teks bernama Hipster sehingga kita dapat membuat dan mengedit file dengan menjalankan perintah berikut: npm install -g [email protected] . Editor file ini sederhana, dan jelas bukan sesuatu yang akan saya gunakan sebagai editor untuk hal lain, tetapi cukup baik dalam kasus ini. Membuat file dengan Hipster sangat sederhana, jalankan saja hip filename , seperti hip package.json ; untuk menyimpan tekan Ctrl + s dan untuk keluar tekan Ctrl + q . Untuk contoh ini saya akan menggunakan kode yang dikembangkan oleh salah satu pengembang utama NodeOS, saya sendiri belum benar-benar mengimplementasikannya. Kode asli untuk contoh kita dapat ditemukan di repositori Git node-bin-man.

Mari kembali membuat aplikasi NodeOS pertama kita. Seperti halnya setiap aplikasi Node.js (atau paket NPM), kita mulai dengan membuat file package.json , seperti pada contoh berikut:

 { "name": "bin-man", "version": "0.0.1", "description": "Format and display manual pages", "bin": { "man": "man.js" }, "repository": "https://github.com/groundwater/node-bin-man", "author": "groundwater", "license": "MIT", "dependencies": { "blessed": "~0.0.22" } }

name parameter , version , author , repository , license , dan description sudah cukup jelas. Koleksi bin adalah objek kunci/nilai JSON yang berisi nama perintah dan file JavaScript terkait. Dalam contoh kita, perintah man dikaitkan dengan file man.js . Koleksi, dependencies , berisi daftar paket NPM yang diperlukan untuk menggunakan aplikasi ini. Dalam contoh kami, pembuat kode menyertakan Beata, pustaka seperti kutukan dengan API antarmuka terminal tingkat tinggi untuk Node.js.

Sekarang mari kita ke bagian utama, kode yang sebenarnya.

 #!/usr/bin/env node

Bagian ini disebut "shebang". Ini sebenarnya tidak diperlukan oleh NodeOS, tetapi memberitahu sistem operasi cara mengeksekusi kode berikut. Dalam kasus kami, ini memberi tahu penerjemah bahwa semuanya perlu dieksekusi dengan perintah /usr/bin/env node .

 var fs = require('fs'); var blessed = require('blessed');

Sama seperti di Node.js, fungsi require() memuat paket yang dipilih ke dalam memori dan menyimpannya ke variabel yang ditentukan.

 var arg = process.argv[2] || 'bin-man';

Perilaku standar dari perintah man adalah memberi tahu manual tentang dirinya sendiri jika tidak ada perintah lain yang ditentukan. Contoh kode kami melakukan hal yang sama: Jika tidak ada argumen yang ditentukan untuk parameter kedua (yang pertama adalah man itu sendiri), defaultnya adalah bin-man.

 var path = process.env.HOME + "/lib/node_modules/" + arg + "/README.md"; try{ var readme = fs.readFileSync(path, 'utf-8'); }catch(e){ console.log('No README.md for Package ',arg); process.exit(-1); }

Pada titik ini, program memeriksa apakah ada file readme untuk aplikasi yang diberikan. Di NodeOS, jalur penginstalan setiap aplikasi adalah direktori home (atau / ) diikuti oleh direktori lib/node_modules . Jika file README.md ada, kontennya akan disimpan di dalam variabel readme . Jika tidak, itu menunjukkan kesalahan dan keluar dari proses.

 // Create a screen object. var screen = blessed.screen(); var box = blessed.box({ content: readme, alwaysScroll:true, scrollable: true, }); // Append our box to the screen. screen.append(box);

Diberkati memiliki API yang sangat sederhana; menampilkan konten file semudah menyuruhnya membuat box dan memuat konten.

 screen.key(['escape', 'q', 'C-c'], function(ch, key) { return process.exit(0); });

Sekarang, mari kita buat cara untuk keluar dari aplikasi man . Kami menggabungkan kunci escape , q atau kombinasi gaya emacs Cc untuk keluar dari proses.

 screen.key(['space','f','j','n'], function(ch, key) { box.scroll(box.height); screen.render(); }); screen.key(['down'], function(ch, key) { box.scroll(1); screen.render(); }); screen.key(['up'], function(ch, key) { box.scroll(-1); screen.render(); }); screen.key(['b','k','p'], function(ch, key) { box.scroll(-box.height); screen.render(); });

Kami menggunakan tombol arah untuk menggulir ke atas atau ke bawah satu baris dan tombol space , f , j atau n untuk menggulir ke bawah halaman (garis sebanyak yang ada di layar). Gunakan b , k atau p untuk melakukan kebalikannya.

 box.focus(); screen.render();

Terakhir, kami memberi tahu aplikasi untuk fokus pada box yang kami buat dan merender semuanya. Mari kita letakkan file-file itu di direktori /lib/node_modules/bin-man dan tambahkan README.md sederhana, seperti ini:

 # Man Author: @groundwater ## Install npkg install bin-man ## Usage ``` Usage: man PKGNAME Display a packages README.md file ```

Kami hampir selesai dengan aplikasi kustom pertama kami untuk NodeOS. Hanya satu langkah kecil terakhir yang tersisa; kita perlu membuat file konfigurasi karena ini adalah persyaratan untuk aplikasi NodeOS. Ini semudah membuat file di jalur /etc/bin-man/config.json dengan konten berikut: {} , objek JSON kosong. Sekarang, kita dapat mencoba aplikasi baru kita. Running man di dalam shell NodeOS akan menampilkan file readme yang kita buat sebelumnya.

Kesimpulan

Seperti yang Anda lihat dengan contoh kode sederhana kami, mengimplementasikan apa pun di NodeOS adalah tugas yang mudah, Anda hanya perlu mengetahui Node.js.

NodeOS memiliki banyak potensi, dan saya pikir itu bisa menjadi sistem operasi yang hebat setelah fitur tambahan diimplementasikan. Itu masih perlu bekerja, tetapi sebagai akibat dari popularitas seluruh ekosistem berbasis Node.js, saya tidak akan terkejut jika dengan cepat menjadi sistem operasi yang populer dengan cepat. Apa yang Anda pikirkan? Beri tahu saya di komentar.