1 poin oleh GN⁺ 2025-04-03 | 1 komentar | Bagikan ke WhatsApp
  • Dukungan Plan 9 yang bermula dari pengumuman April Mop berlanjut menjadi PR nyata serta perubahan kernel dan Go, dan per 2 April 2025 telah mencapai tahap di mana Tailscale berjalan di Plan 9
  • Ini bukan sekadar masalah build GOOS=plan9 GOARCH=386, melainkan lebih dulu mengungkap runtime crash dan masalah penanganan khusus di compiler pada port Go untuk Plan 9
  • Perbaikan kernel Plan 9 serta runtime dan compiler Go oleh Russ Cox juga membereskan SSE, konteks floating point, waktu monotonik, DNS, dan masalah lingkungan pengembangan
  • Tailscale memanfaatkan antarmuka berkas /net milik Plan 9 untuk memasang implementasi mirip TUN, routing, Tailscale SSH, MagicDNS, dan pengumpulan layanan, tetapi sebagian masih berupa implementasi sementara atau belum selesai
  • Cakupan verifikasi saat ini terutama pada 9legacy dan GOARCH=386, sedangkan 9front, amd64, exit node, dan dukungan Go net/netns masih memerlukan verifikasi tambahan atau desain ulang

Lelucon April Mop yang berujung menjadi porting nyata

  • Tailscale mengumumkan dukungan Plan 9 pada 1 April 2025, lalu keesokan harinya memaparkan latar belakang bahwa pengumuman itu didasarkan pada pekerjaan porting yang benar-benar berfungsi
  • Pekerjaan ini berlanjut ke Tailscale PR dan berbagai perubahan pada Plan 9 dan Go
  • Pendekatan awal berangkat dari harapan bahwa dua biner Go milik Tailscale dapat dibangun cukup dengan GOOS=plan9 GOARCH=386 go install ./cmd/tailscale{,d}
  • Pada percobaan pertama di Agustus 2023, sebagian build memang berhasil, tetapi saat dijalankan terjadi crash yang tidak normal
    • Port Plan 9 di Go bukan first-class port, sehingga regresi dibiarkan begitu saja
    • Ada kemungkinan Tailscale mendorong Go di Plan 9 lebih keras daripada penggunaan sebelumnya
  • Porting sempat berhenti sepanjang 2024, lalu dilanjutkan lagi pada Maret 2025 bersama ide April Mop

Merapikan SSE dan dukungan Plan 9 di Go

  • Instruksi SSE yang diperkenalkan pada Intel Pentium III tahun 1999 menjadi salah satu titik awal utama pekerjaan ini
  • Compiler Go selama ini berusaha menghindari penggunaan SSE pada target Plan 9
    • Karena kernel Plan 9 tidak menyimpan dan memulihkan register SSE di note handler
    • Compiler Go tidak bisa mengetahui kode mana yang akan berjalan di dalam note handler, sehingga mencoba menonaktifkan SSE secara global
    • Penanganan khusus ini sering rusak dan membuat banyak pengecualian plan9 tersebar di compiler
  • Russ Cox memodifikasi kernel Plan 9 agar note handler menangani konteks floating point dan SIMD
  • Di sisi Go, penghapusan penanganan khusus pembangkitan kode untuk Plan 9 membuat tailscaled bisa berjalan lebih lama

IPC dan lingkungan pengembangan

  • Setelah itu tailscaled mulai crash karena kehabisan memori, bukan lagi karena kerusakan stack
  • Dalam percobaan porting Plan 9 sebelumnya, paket IPC safesocket milik Tailscale memiliki bug yang membuat goroutine dibuat tanpa henti
  • Masalah ini diselesaikan sementara dengan beralih memakai localhost TCP
    • Ini memang kurang cocok dengan pendekatan Plan 9 bahwa “semuanya adalah berkas”, tetapi dipastikan layanan Plan 9 lain juga memakai localhost TCP
    • Ke depannya, pendekatan yang lebih baik mungkin menggunakan paket srv9p yang dipindahkan Russ ke Go untuk menaruh LocalAPI di atasnya
    • Implementasi saat ini juga belum bisa menambahkan autentikasi localhost seperti di platform lain, sehingga secara eksplisit dinyatakan tidak boleh dipakai pada mesin Plan 9 bersama
  • Pengembangan awal dilakukan di VM berbasis image CD 9legacy, dan siklus mengunduh biner lewat HTTP lalu menjalankannya terasa lambat
  • rsc/plan9 buatan Russ Cox menyertakan source Plan 9, biner prakompilasi, dan skrip ./boot/qemu
    • VM qemu melakukan boot tanpa disk dan memakai repositori Git yang disajikan server 9P localhost sebagai root filesystem
    • Dengan berbagi filesystem antara mesin pengembang dan Plan 9, waktu iterasi turun dari hitungan menit menjadi hitungan detik
    • qemu juga memakai virtio sehingga lebih cepat

Integrasi jaringan: TUN, routing, MagicDNS

  • Tailscale yang pertama kali berfungsi berjalan dalam mode jaringan ruang pengguna yang tidak memakai stack jaringan kernel
    • TCP, UDP, ICMP, dan lainnya ditangani melalui netstack milik gVisor
    • Untuk mengakses tailnet dari mesin Plan 9, pengguna harus memakai proxy HTTP/SOCKS5 dari tailscaled
    • Ini tidak ideal karena hampir tidak ada program Plan 9 yang memahami variabel lingkungan HTTP_PROXY atau ALL_PROXY
  • Implementasi mirip TUN di Plan 9 sangat sederhana
    • Buka /net/ipifc/clone lalu baca nomor antarmuka baru
    • Tulis "bind pkt\n" ke control fd, maka antarmuka baru seperti /net/ipifc/2/* akan muncul
    • Buka /net/ipifc/2/data untuk membaca dan menulis paket IP apa adanya
    • Tidak perlu ioctl terpisah atau framing berbasis panjang
  • Manipulasi tabel routing juga dilakukan melalui berkas /net/iproute
    • Tulis "tag tail\n" untuk menandai route yang ditambahkan setelahnya dengan tag tail
    • Tambahkan route dengan pesan seperti "add 100.64.0.0 /106 100.102.103.104"
    • Karena bagian internal Plan 9 berpusat pada IPv6 dan memperlakukan IPv4 sebagai alamat IPv6 yang di-map, CGNAT 100.64.0.0/10 dinyatakan seperti /106
  • MagicDNS bertujuan memungkinkan peer diakses di Plan 9 dengan nama seperti foo atau foo.tailnet-name.ts.net
    • Opsi seperti mencegat kueri /net/dns atau /net/cs juga sempat dibahas
    • Pada akhirnya Russ memodifikasi Plan 9 agar server DNS alternatif bisa ditetapkan untuk suffix DNS tertentu
    • Masalah kueri DNS yang salah masuk negative cache juga diperbaiki

Tailscale SSH dan pengumpulan layanan

  • Tailscale SSH adalah server SSH bawaan tailscaled yang mengautentikasi identitas Tailscale yang dikenal melalui kunci WireGuard yang terkait dengan paket dan koneksi
  • Awalnya, shell Plan 9 /bin/rc dijalankan dengan os/exec.Command dan stdin/stdout dihubungkan
    • Shell memang berjalan, tetapi echo, navigasi, dan interrupt proses tidak berfungsi dengan benar
  • Russ menambahkan contoh netshell ke 9fans/go
    • Contoh ini sangat tidak aman dan lebih mirip server telnet, tetapi cukup memadai jika diletakkan di belakang Tailscale SSH
    • Setelah itu menjadi lebih mudah mengambil isi /dev/snarf Plan 9 melalui SSH, atau cross-compile pengujian Go dari laptop lalu menjalankannya via SSH
  • Fitur opsional Tailscale berupa pengumpulan layanan juga ditinjau agar sesuai dengan Plan 9
    • Ia menelusuri /proc/NNN/fd untuk mencari proses yang membuka /net/tcp/clone
    • QID pada fd dicocokkan dengan /net/tcp/NNN/{status,local} untuk mengetahui apakah ia sedang listening dan di port mana
    • Cara menghitung nomor TCP dari QID dianggap kurang memuaskan karena rentan terhadap perubahan implementasi kernel

Waktu, demo web, v86

  • Ada kasus tailscaled crash karena gVisor netstack melaporkan waktu monotonik mundur ke belakang
    • Implementasi waktu Plan 9 di Go memakai wall time sebagai waktu monotonik
    • Ketika ntpd memundurkan jam, asumsi netstack tentang waktu monotonik pun rusak
  • Russ menambahkan waktu monotonik ke /dev/bintime di Plan 9 dan memodifikasi Go agar memakainya melalui perubahan ini
  • Untuk menjalankan Plan 9 di web digunakan v86
    • v86 menjalankan sistem operasi 32-bit dalam WASM dan menyediakan berbagai metode jaringan
    • Ini juga menjadi salah satu alasan fokus pada GOARCH=386
  • Awalnya, untuk mengirim frame Ethernet ke websocket relay, ditambahkan dukungan protokol wsproxy ke lingkungan simulasi jaringan Tailscale
    • Ini berjalan di lingkungan pengujian terintegrasi yang meniru ARP, DHCP, DNS, NAT, control plane, DERP, dan lainnya dengan gVisor netstack
    • Namun karena round-trip DHCP, jika relay jauh maka startup GUI Plan 9 rio menjadi lambat
  • Setelah itu server WISP juga diimplementasikan, tetapi waktu tidak cukup untuk memproduksikannya sebelum rilis, sehingga dipublikasikan dengan pengaturan relay jaringan bawaan copy.sh/v86
  • Image disk berisi Tailscale dan Plan 9 berukuran 16MB, sedangkan biner Tailscale berukuran 23MB setelah diekstrak
    • Karena itulah tahap “gunzip…” terlihat saat boot
    • Image contoh disertakan dalam profil 9legacy milik copy.sh/v86

Pekerjaan yang tersisa dan hasil nyata

1 komentar

 
GN⁺ 2025-04-03
Komentar Hacker News
  • Kalau ada yang ingin ditanyakan, saya bisa menjawab
    Saat ini beberapa orang sedang membicarakan ini di https://meet.google.com/qre-gydb-mkv
    Edit: setelah satu jam, semua orang sudah keluar
    Tulisan blog 1 April sebelumnya ada di https://tailscale.com/blog/tailscale-enterprise-plan-9-suppo...

    • Saya belum pernah menyiapkan sistem Plan 9 sama sekali; dengan ini, apakah saya bisa membuat komunikasi sistem terdistribusi lewat Tailnet saya?
  • Russ Cox benar-benar legendaris karena membawa lelucon ini sampai sejauh itu

    • Semoga ada yang membujuk Russ bahwa memasukkan browser web lengkap ke Plan 9 bakal sangat lucu
  • Di milis 9fans, ada postingan seperti ini untuk April Mop
    Isinya, biaya pemeliharaan arsitektur komputer yang belum matang seperti mips, 386, arm, arm64, dan amd64 terlalu besar, sehingga mereka memutuskan fokus pada arsitektur yang lebih matang dan stabil
    Sasarannya adalah power64 dan itanium, jadi semua arsitektur selain power64 dan itanium akan dibekukan, diarsipkan, dan dinaikkan statusnya menjadi akhir masa pakai

  • Tanpa bercanda, saya benar-benar berharap ada versi enterprise Plan 9
    Belakangan ini sebagian besar skrip saya ditulis dengan rc, dan karena kami memakai nix serta bisa menariknya otomatis dengan dirnev, rekan-rekan kerja masih memakluminya; sejauh ini cukup bagus

    • Saya mungkin lebih khawatir apakah orang lain bisa membaca dan mengubah skrip rc itu, daripada apakah mereka bisa menjalankannya
    • Salah satu kelebihan rc adalah ini[1]:
      “Prinsip terpenting dalam desain rc adalah bahwa ia bukan pemroses makro. Input tidak pernah dipindai lebih dari sekali oleh kode analisis leksikal dan sintaksis”
      Dulu di sebuah perusahaan Unix tempat saya bekerja, skrip shell yang sedang berjalan diubah, sehingga sebagian besar disk kerja terhapus. Untungnya kami menyimpan backup harian di tape; itu kira-kira 17 tahun lalu
      [1] https://www.scs.stanford.edu/nyu/04fa/sched/readings/rc.pdf
    • Bisa jelaskan lebih lanjut, secara spesifik apa yang kamu harapkan dari “Plan 9 enterprise”?
  • Kalau melewatkan tulisan pertama dan hanya ingin mencobanya sendiri, ini berjalan di image v86 berikut:
    https://copy.sh/v86/?profile=custom&m=768&vram=16&hda.url=ht...
    Di dalam VM, kamu bisa menjalankan tailscaled dan tailscale. Karena ketersediaan proxy terbatas, mungkin butuh beberapa waktu sampai menjadi online
    Edit: alt berfungsi sebagai tombol ketiga. Untuk membuka terminal, tahan alt lalu klik kanan, pilih new, lepaskan alt, lalu seret dengan klik kanan untuk mengatur ukuran jendela terminal

  • Webinar sedang berlangsung (Google Meet) https://ftp.plan9.ts.net/webinar

    • Untuk yang mungkin tertarik, barusan sudah selesai
  • Saya suka premis leluconnya, tapi semakin panjang penjelasannya, mendadak rasanya jadi muram
    Terlalu banyak yang rusak dan kompleksitasnya juga terlalu besar. Pada akhirnya untuk apa, membuat satu tunnel jaringan? Kalau pekerjaan tambahan ini sendiri adalah leluconnya, mungkin akan lucu

    • Untuk membuat pekerjaan baru ini berjalan, memang perlu sedikit pekerjaan di sisi Plan 9, tetapi implementasi Tailscale sebenarnya jauh lebih sedikit pekerjaannya dibanding Unix lain
    • Kedengarannya pekerjaan ini juga membuat compiler Go jadi lebih baik. Karena penanganan khusus Plan 9 di dalam kode berkurang
  • Saya rasa saya bisa mengobrol berjam-jam dengan rsc, rob pike, dan bradfitz, terutama soal Plan 9. Tentu saja itu akan benar-benar membuang-buang waktu mereka
    Sistem operasi itu benar-benar memikat
    Saya ingat di awal karier, ada seorang ahli yang bekerja bersama saya duduk di sebelah saya, dengan sabar menunjukkan caranya dan menjawab pertanyaan sampai saya cukup paham. Rasanya seperti dibuat mampu berenang meski dilempar ke air dalam, dan dalam tiga jam saya seperti mendapat satu gelar sarjana untuk pengetahuan tertentu; itu salah satu pertumbuhan tercepat dalam karier saya
    Saya tidak tahu C dan juga belum cukup tahu untuk memakai Plan 9 secara produktif, tetapi ada fitur-fitur keren dan berguna yang ingin saya ketahui dan pelajari lebih jauh, sekadar agar bisa merindukan hal-hal yang tidak ada di tiga sistem operasi utama saat ini
    Kalau punya uang, saya ingin membeli waktu untuk berbicara langsung dengan ketiganya demi memperluas pengetahuan Go saya, dan juga membeli waktu rsc serta rob pike demi pemahaman Plan 9 yang selalu saya inginkan tetapi tidak pernah bisa saya dapatkan sendiri

  • Saya sangat suka Plan 9. Mengambil banyak prinsipnya untuk membuat sistem operasi saya sendiri adalah proyek pensiun sekaligus tujuan hidup saya
    Edit: saya sudah mencadangkan nama proyek ini sebagai “chaos10”. Seperti SerenityOS, mungkin tidak akan ada rencana

  • Sama sekali tidak menyangka mereka sampai akan mem-patch kernel Plan 9 agar ini bisa berjalan

    • Kenapa tidak? Jelas belum ada yang pernah melakukan hal seperti ini secara serius, jadi jumlah pekerjaan yang hilang tampaknya relatif kecil :)