1 poin oleh GN⁺ 3 jam lalu | 1 komentar | Bagikan ke WhatsApp
  • 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) dan httpd(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
  • 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

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) dan httpd(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 ke httpd(8)
    • Proses modernisasi itu sendiri digunakan sebagai cara untuk memahami codebase

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
  • Pendekatan yang sama juga diterapkan ke httpd(8), dan README.md terperinci 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, dan imsgbuf_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 knfmt diterapkan

Penguatan keamanan relayd(8)

  • Cipher suite TLS default diubah dari HIGH:!aNULL menjadi secure
  • Dukungan ECDSA ditambahkan ke mesin pemisahan hak akses CA (privsep)
  • Header Content-Length yang duplikat ditolak dengan respons HTTP 400
  • Header obs-fold tidak diizinkan untuk mencegah perbedaan parser sesuai RFC 9112 5.2
  • ID proses diperiksa dan IMSG_CTL_PROCFD dibatasi ke proses induk
  • explicit_bzero digunakan 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, dan tls_cfg telah 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-Agent dapat diatur untuk permintaan health check HTTP
  • Respons HTTP tanpa body kini ditangani dengan benar

Modernisasi httpd(8) dan kualitas kode

  • proc.c dialihkan ke API imsg baru agar konsisten dengan relayd(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 knfmt diterapkan
  • Penanganan fitur bawaan dipisahkan ke fungsi khusus

Penguatan keamanan httpd(8)

  • Cipher suite TLS default diubah dari compat menjadi secure
  • Framing permintaan CL.TE ditolak untuk mencegah serangan request smuggling
  • Header obs-fold dibalas dengan HTTP 400 sesuai RFC 9112 5.2
  • Jika header Content-Length dan Transfer-Encoding muncul bersamaan, itu diperlakukan sebagai error
  • Relinking acak dilakukan saat boot untuk perlindungan tambahan
  • ID proses diperiksa dan IMSG_CTL_PROCFD dibatasi ke proses induk
  • Opsi no banner ditambahkan 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-encoding telah diselesaikan
  • fcgiparams pada 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-build telah dihapus
  • return_uri_len kini divalidasi sebelum data disalin

Fitur baru httpd(8) dan pekerjaan yang tersisa

  • Mendukung header HTTP kustom
  • gzip-static kini 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

 
GN⁺ 3 jam lalu
Komentar Lobste.rs
  • Senang melihat dukungan untuk header HTTP kustom. Dulu karena fitur ini tidak ada, saya bahkan tidak bisa memakai httpd untuk kebutuhan sederhana, jadi bagus sekarang sudah didukung

  • Pengembangan relayd(8) dan httpd(8) sempat mandek, dan meskipun beberapa kontributor mengirim patch ke mailing list tech@, 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 pemeliharaannya

  • Saya 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

    • Jalankan man 1 man atau singkatnya man man untuk melihat man(1). Terutama berbagai halaman intro yang muncul di SEE ALSO sangat berguna
  • Saya 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