- Pengembangan relayd(8) dan httpd(8) yang sempat mandek karena berkurangnya perhatian dari pengembang OpenBSD lama kini kembali aktif berkat kontribusi dari pihak yang memiliki kebutuhan operasional nyata
- Berangkat dari keyakinan bahwa di era ketika LLM menggantikan pengetahuan coding, kita justru perlu belajar dan menantang diri dengan C secara langsung, modernisasi dimulai dari sistem imsg buatan tangan di relayd(8)
- Patch yang belum diterapkan di mailing list
tech@sepanjang 2024~2026 dan issue lama di mirror GitHub sebelumnya sebagian besar sudah dibereskan, serta disiapkan pula mirror Git dan README untuk kontributor baru - relayd(8) memperkuat API imsg yang aman, keamanan TLS dan parsing permintaan, serta memperbaiki konflik saat reload; sementara httpd(8) menambahkan pertahanan request smuggling, header kustom, dan kontrol cache file statis
- Keamanan, stabilitas, dan skalabilitas kedua daemon sama-sama meningkat, tetapi backlog juga bertambah selama proses pengerjaan sehingga ide dan masukan masih terus diterima
Latar belakang menghidupkan kembali proyek yang ditinggalkan
- Seperti dibahas dalam perubahan utama OpenBSD 7.8, pengembangan
relayd(8)danhttpd(8)berada dalam kondisi stagnan- Banyak kontributor mengirim patch ke mailing list
tech@, tetapi hampir tidak ada yang masuk ke repositori - Penyebab utamanya adalah para pengembang OpenBSD lama tidak lagi menaruh perhatian pada kedua daemon tersebut
- Banyak kontributor mengirim patch ke mailing list
- Bersama
kirill@, pengembangan aktif dimulai berdasarkan pengalaman menggunakan kedua daemon itu secara rutin dan menangani kasus penggunaan nyata- Kebutuhan praktis untuk mendukung pelanggan OpenBSD dengan konfigurasi
httpd(8)·relayd(8)yang kompleks juga menjadi pendorong langsung
- Kebutuhan praktis untuk mendukung pelanggan OpenBSD dengan konfigurasi
Alasan kembali ke C di era LLM
- Pemicu terbesar adalah kemunculan LLM
- Di masa lalu, penulis secara profesional menulis kode C++ modern, tetapi kemudian beralih ke arsitektur solusi, rekayasa platform, dan membangun tim sehingga hampir tidak lagi menulis kode secara langsung
- Aktivitasnya lebih banyak terbatas pada menulis YAML deklaratif serta membaca dan mem-porting kode untuk OpenBSD
ports(7)
- Berlawanan dengan klaim bahwa “masalah coding sudah selesai”, penulis menilai bahwa justru ketika pengetahuan didelegasikan ke pihak luar, memiliki pengetahuan itu sendiri menjadi lebih penting
- C++ dan Rust menggantikan sebagian keputusan sulit, tetapi C tidak, dan hal itu dijadikan tantangan untuk mulai berkontribusi ke
relayd(8)danhttpd(8)
Kontribusi yang ditopang disiplin, bukan sekadar motivasi
- Kontribusi open source bisa saja berakhir dengan frustrasi hanya dalam beberapa minggu, tetapi setelah melewati tahap awal yang menyakitkan, penulis berhasil mencapai kondisi untuk bekerja secara konsisten
- Awalnya, membaca codebase secara pasif terasa mengecewakan di banyak bagian
- Penyebabnya adalah minimnya komentar, beberapa desain yang kurang baik, dan kode yang saling terkait secara rumit; belum jelas apakah ini sifat umum kode C atau karena kurangnya pengalaman pribadi
- Setelah berdiskusi dengan para maintainer daemon OpenBSD, diputuskan untuk memodernisasi sistem pesan imsg yang dibuat secara manual
- Fokus pertama diarahkan ke
relayd(8), lalu cakupannya diperluas kehttpd(8) - Proses modernisasi itu sendiri digunakan sebagai cara untuk memahami codebase
- Fokus pertama diarahkan ke
Merapikan patch yang belum diterapkan dan issue lama
- Arsip mailing list
tech@dari 2024~2026 ditinjau untuk mengumpulkan patch dan issue yang belum ditangani, dan dinilai bahwa sebagian besarnya sudah selesai diproses - Kedua daemon ini awalnya dikembangkan oleh Reyk Floeter, yang kini telah pensiun dari OpenBSD
- Issue lama di mirror GitHub relayd yang dikelola Reyk juga ditinjau
- Semua issue kini sudah ditutup atau berada dalam kondisi bisa diperbaiki, dan sebagian sudah tidak lagi relevan
Mirror Git untuk kontributor baru
- Terinspirasi dari mirror GitHub yang ada, dibangun mirror terpisah untuk membantu masuknya kontributor baru dan muda, sekaligus menciptakan titik temu dengan komunitas di luar mailing list OpenBSD
- Tree CVS digunakan sebagai mirror Git, dengan pengembangan dilakukan terlebih dahulu di instance Gothub lalu disinkronkan ke repositori lain
- Primary: https://rsadowski.gothub.org/
- Mirror: https://codeberg.org/rsadowski/relayd
- Mirror: https://github.com/sizeofvoid/relayd
- Pendekatan yang sama juga diterapkan ke
httpd(8), danREADME.mdterperinci berisi informasi yang diperlukan turut disusun
Modernisasi relayd(8) dan kualitas kode
- Sistem imsg dialihkan ke accessor yang lebih aman:
imsg_get_data,imsg_get_type, danimsgbuf_get - Penanganan error yang tepat ditambahkan ke seluruh proses pembacaan payload imsg
- Logging dan komentar distandardisasi agar konsisten dengan
bgpd - Penanganan start-line HTTP dipisahkan ke fungsi khusus untuk memperbaiki struktur kode
- Format
knfmtditerapkan
Penguatan keamanan relayd(8)
- Cipher suite TLS default diubah dari
HIGH:!aNULLmenjadisecure - Dukungan ECDSA ditambahkan ke mesin pemisahan hak akses CA (privsep)
- Header
Content-Lengthyang duplikat ditolak dengan respons HTTP 400 - Header
obs-foldtidak diizinkan untuk mencegah perbedaan parser sesuai RFC 9112 5.2 - ID proses diperiksa dan
IMSG_CTL_PROCFDdibatasi ke proses induk explicit_bzerodigunakan untuk menghapus data kata sandi yang sensitif
Perbaikan bug dan stabilitas relayd(8)
- Race condition saat reload yang menyebabkan crash telah diperbaiki
- Berbagai memory leak terkait
X509_dup,config_purge, dantls_cfgtelah dihapus - Pemeriksaan NULL dan boundary check dibetulkan
- Penanganan error yang tepat ditambahkan untuk kegagalan OpenSSL
- Saat TLS gagal, queue error OpenSSL kini dibersihkan
Fitur yang ditambahkan ke relayd(8)
- Mendukung metode HTTP
MKCALENDAR - Kini bisa menggunakan TLS di beberapa listener
- Mendukung beberapa alamat yang dapat di-resolve namanya
- Path sertifikat, kunci, dan OCSP staple dapat ditentukan secara eksplisit
User-Agentdapat diatur untuk permintaan health check HTTP- Respons HTTP tanpa body kini ditangani dengan benar
Modernisasi httpd(8) dan kualitas kode
proc.cdialihkan ke API imsg baru agar konsisten denganrelayd(8)- Urutan token diubah agar opsi konfigurasi di masa depan lebih mudah diperluas
- Logging distandardisasi agar konsisten dengan
bgpd - Kode duplikat dan fungsi kosong dihapus
- Format
knfmtditerapkan - Penanganan fitur bawaan dipisahkan ke fungsi khusus
Penguatan keamanan httpd(8)
- Cipher suite TLS default diubah dari
compatmenjadisecure - Framing permintaan CL.TE ditolak untuk mencegah serangan request smuggling
- Header
obs-folddibalas dengan HTTP 400 sesuai RFC 9112 5.2 - Jika header
Content-LengthdanTransfer-Encodingmuncul bersamaan, itu diperlakukan sebagai error - Relinking acak dilakukan saat boot untuk perlindungan tambahan
- ID proses diperiksa dan
IMSG_CTL_PROCFDdibatasi ke proses induk - Opsi
no bannerditambahkan untuk menyembunyikan informasi identitas server dalam respons
Perbaikan bug dan stabilitas httpd(8)
- Penanganan suffix range pada permintaan HTTP diperbaiki
server_http_time()dibetulkan agar menampilkan waktu GMT dengan benar- Error
timegm(3)kini diperiksa sesuai spesifikasi manual - Masalah upload yang menggunakan
chunked transfer-encodingtelah diselesaikan fcgiparamspada location diperbaiki agar tidak terkirim dua kali- Penanganan error yang tepat ditambahkan ke
dispatch_parent - Respons yang dibatalkan kini dikosongkan dengan benar melalui
bufferevent - Penyimpanan yang tidak perlu yang ditemukan
scan-buildtelah dihapus return_uri_lenkini divalidasi sebelum data disalin
Fitur baru httpd(8) dan pekerjaan yang tersisa
- Mendukung header HTTP kustom
gzip-statickini diwariskan di location untuk pewarisan konfigurasi yang lebih baik- Flag server diperluas menjadi bilangan bulat 64-bit agar bisa menampung lebih banyak opsi flag
- Ditambahkan kontrol cache untuk file statis
- Seiring pekerjaan berjalan, backlog juga bertambah, dan ide serta masukan untuk pengembangan selanjutnya masih terus diterima
1 komentar
Komentar Lobste.rs
Senang melihat dukungan untuk header HTTP kustom. Dulu karena fitur ini tidak ada, saya bahkan tidak bisa memakai
httpduntuk kebutuhan sederhana, jadi bagus sekarang sudah didukungPengembangan
relayd(8)danhttpd(8)sempat mandek, dan meskipun beberapa kontributor mengirim patch ke mailing listtech@, hampir tidak ada yang masuk ke repositori. Katanya alasan utamanya adalah para pengembang OpenBSD yang ada sudah tidak terlalu berminat lagi pada daemon-daemon ini, jadi terima kasih karena sudah mengambil alih pemeliharaannyaSaya rutin memakai kedua perangkat lunak ini, jadi senang melihat sekarang kembali dikelola dengan baik. Saya sama sekali tidak tahu bahwa pengembangannya sempat mandek
Sepertinya berkat struktur perangkat lunaknya yang sederhana, pengembangan bisa dijalankan lagi tanpa tim besar dan tetap memasukkan sebanyak ini fitur serta perbaikan
Saya sempat bingung cukup lama dengan angka di belakang nama perangkat lunak, lalu baru tahu itu adalah nomor bagian manual
1 berarti program yang dapat dijalankan·perintah shell, 2 panggilan sistem, 3 panggilan pustaka, 4 berkas khusus, 5 format berkas·konvensi, 6 game, 7 lain-lain, 8 perintah administrasi sistem, dan 9 yang nonstandar berarti rutin kernel
man 1 manatau singkatnyaman manuntuk melihat man(1). Terutama berbagai halamanintroyang muncul diSEE ALSOsangat bergunaSaya penasaran apakah perbaikan-perbaikan ini akan masuk ke OpenBSD 8.0
Saya penasaran apakah tautannya memang sejak awal dibuat agar bisa dibaca seperti itu. Di Firefox untuk Android, tampilannya seperti ini
https://imgur.com/a/oTimS9R
https://i.ibb.co/V0BgWFbV/image.png
https://hypertekst.net/Screenshot.png