- Mevcut OpenBSD geliştiricilerinin ilgisi azalınca durağanlaşan relayd(8) ve httpd(8) geliştirmesi, gerçek operasyonel ihtiyaçları olan katkıcıların katılımıyla yeniden canlandı
- LLM’lerin kodlama bilgisinin yerini aldığı bir dönemde bile doğrudan C öğrenip buna meydan okumak gerekir düşüncesiyle yola çıkılarak, önce relayd(8)’nin el yapımı imsg sistemi modernize edildi
- 2024~2026 arasındaki
tech@posta listesinde depoya alınmamış yamaların ve mevcut GitHub aynasındaki eski issue’ların büyük kısmı temizlendi; yeni katkıcılar için ayrıca Git mirror ve README hazırlandı - relayd(8), güvenli imsg API’si, TLS ve istek ayrıştırma güvenliği ile yeniden yükleme çakışmaları konusunda iyileştirilirken; httpd(8)’ye request smuggling savunması, özel başlıklar ve statik dosya cache kontrolü eklendi
- Her iki daemon’un güvenlik, kararlılık ve genişletilebilirliği birlikte ilerledi; ancak çalışma sürecinde backlog da büyüdü ve fikirlerle geri bildirimler alınmaya devam ediliyor
İlginin kaybolduğu bir projeyi yeniden canlandırmanın arka planı
- OpenBSD 7.8 başlıca değişikliklerinde ele alındığı gibi,
relayd(8)vehttpd(8)geliştirmesi durağan bir durumdaydı- Birçok katkıcı
tech@posta listesine yamalar gönderdi, ancak bunların neredeyse hiçbiri depoya yansımadı - Bunun başlıca nedeni, mevcut OpenBSD geliştiricilerinin artık bu iki daemon’la ilgilenmemesiydi
- Birçok katkıcı
kirill@ile birlikte iki daemon’u düzenli olarak kullanıp gerçek kullanım senaryolarını ele alma deneyimine dayanarak aktif geliştirmeye başlandı- Karmaşık
httpd(8)·relayd(8)yapılandırmalarıyla OpenBSD müşterilerine destek verme şeklindeki pratik ihtiyaç, doğrudan itici güç oldu
- Karmaşık
LLM çağında neden yeniden C’ye dönüldü
- En büyük tetikleyici LLM’lerin ortaya çıkışı oldu
- Geçmişte modern C++ kodunu profesyonel olarak yazıyordu; ancak sonrasında çözüm mimarisi, platform mühendisliği ve ekip kurmaya geçince neredeyse hiç gerçek kod yazmamaya başladı
- Daha çok bildirimsel YAML yazıyor, OpenBSD
ports(7)için kod okuyup port ediyordu
- “Kodlama çözüldü” iddiasının aksine, bilginin dışarı devredildiği bir dönemde o bilgiye doğrudan sahip olmanın daha da önemli olduğu sonucuna varıldı
- C++ ve Rust bazı zor kararları geliştirici adına alsa da C bunu yapmıyor; bu da
relayd(8)vehttpd(8)ye katkı yapma kararında bir meydan okuma olarak görüldü
Motivasyondan çok disiplinle sürdürülen katkı
- Açık kaynak katkıları birkaç hafta içinde hayal kırıklığıyla bitebilir; ancak ilk sancılı aşama geçildikten sonra istikrarlı biçimde çalışılabilen bir noktaya ulaşıldı
- Başta kod tabanı pasif biçimde okunurken birçok noktada moral bozuldu
- Bunun nedeni yetersiz yorumlar, bazı kötü tasarımlar ve karmaşık biçimde iç içe geçmiş koddı; bunun C kodunun doğasından mı yoksa kişisel deneyim eksikliğinden mi kaynaklandığı ise hâlâ net değil
- OpenBSD daemon bakımcılarıyla yapılan görüşmelerden sonra, elle hazırlanmış imsg mesaj sistemini modernize etmeye karar verildi
- Önce
relayd(8)ye odaklanıldı, sonra kapsamhttpd(8)ye genişletildi - Modernizasyon çalışmasının kendisi, kod tabanını anlamanın bir aracı olarak kullanıldı
- Önce
Depoya alınmamış yamalar ve eski issue’ların temizlenmesi
- 2024~2026 dönemindeki
tech@posta listesi kayıtları incelenerek işlenmemiş yamalar ve sorunlar toplandı; bunların büyük kısmının ele alındığı düşünülüyor - Bu iki daemon ilk olarak, bugün OpenBSD’den emekli olan Reyk Floeter tarafından geliştirildi
- Reyk’in yönettiği relayd GitHub aynasındaki eski issue’lar da incelendi
- Tüm issue’lar kapatılabilecek ya da düzeltilebilecek durumda; bazıları artık geçerli değil
Yeni katkıcılar için Git mirror
- Mevcut GitHub aynasından ilhamla, yeni ve genç katkıcıların girişini kolaylaştırmak ve OpenBSD posta listesi dışındaki topluluklarla da temas kurmak için ayrı bir mirror kuruldu
- CVS ağacı Git mirror olarak kullanılıyor; geliştirme önce Gothub örneğinde yapılıyor, ardından diğer depolara senkronize ediliyor
- Primary: https://rsadowski.gothub.org/
- Mirror: https://codeberg.org/rsadowski/relayd
- Mirror: https://github.com/sizeofvoid/relayd
- Aynı yaklaşım
httpd(8)için de uygulandı ve gerekli bilgileri içeren ayrıntılı birREADME.mdyazıldı
relayd(8)’nin modernizasyonu ve kod kalitesi
- imsg sistemi, daha güvenli
imsg_get_data,imsg_get_type,imsgbuf_geterişimcilerine geçirildi - imsg payload okumanın tüm sürecine uygun hata işleme eklendi
bgpdile tutarlı olacak şekilde loglama ve yorumlar standartlaştırıldı- HTTP başlangıç satırı işlemesi özel bir fonksiyona ayrılarak kod yapısı iyileştirildi
knfmtbiçimi uygulandı
relayd(8)’nin güvenlik güçlendirmeleri
- Varsayılan TLS şifre takımı
HIGH:!aNULLyerinesecureolarak değiştirildi - CA privilege separation (privsep) motoruna ECDSA desteği eklendi
- Yinelenen
Content-Lengthbaşlıkları HTTP 400 yanıtıyla reddediliyor - RFC 9112 5.2 uyarınca ayrıştırıcı farklarını önlemek için
obs-foldbaşlıklarına izin verilmiyor - Süreç kimliği denetleniyor ve
IMSG_CTL_PROCFDüst süreçle sınırlandırılıyor - Hassas parola verilerini silmek için
explicit_bzerokullanılıyor
relayd(8)’de hata ve kararlılık iyileştirmeleri
- Çökmeye yol açan yeniden yükleme race condition düzeltildi
X509_dup,config_purge,tls_cfgile ilgili çeşitli bellek sızıntıları giderildi- NULL kontrolleri ve sınır kontrolleri düzeltildi
- OpenSSL hataları için uygun hata işleme eklendi
- TLS hatasında OpenSSL hata kuyruğunun temizlenmesi sağlandı
relayd(8)’ye eklenen özellikler
MKCALENDARHTTP yöntemi destekleniyor- Birden fazla listener üzerinde TLS kullanılabiliyor
- Ad çözümlemesi yapılabilen birden fazla adres destekleniyor
- Sertifika, anahtar ve OCSP staple yolları açıkça ayarlanabiliyor
- HTTP sağlık kontrolü isteklerinde
User-Agentayarlanabiliyor - Gövdesi olmayan HTTP yanıtları doğru şekilde işleniyor
httpd(8)’nin modernizasyonu ve kod kalitesi
proc.c, yeni imsg API’sine taşınarakrelayd(8)ile tutarlılık sağlandı- Gelecekte yapılandırma seçeneklerinin kolay genişletilebilmesi için token sırası değiştirildi
bgpdile tutarlı olacak şekilde loglama standartlaştırıldı- Yinelenen kod ve boş fonksiyonlar kaldırıldı
knfmtbiçimi uygulandı- Yerleşik özellik işlemesi özel fonksiyonlara ayrıldı
httpd(8)’nin güvenlik güçlendirmeleri
- Varsayılan TLS şifre takımı
compatyerinesecureolarak değiştirildi - Request smuggling saldırılarını önlemek için CL.TE request framing reddediliyor
- RFC 9112 5.2 uyarınca
obs-foldbaşlıklarına HTTP 400 ile yanıt veriliyor Content-LengthveTransfer-Encodingbaşlıkları aynı anda bulunursa hata kabul ediliyor- Ek koruma için açılışta rastgele relinking yapılıyor
- Süreç kimliği denetleniyor ve
IMSG_CTL_PROCFDüst süreçle sınırlandırılıyor - Yanıtlarda sunucu kimlik bilgisini gizleyen
no bannerseçeneği eklendi
httpd(8)’de hata ve kararlılık iyileştirmeleri
- HTTP isteklerinde suffix range işleme düzeltildi
server_http_time()fonksiyonunun GMT zamanını doğru üretmesi sağlandı- Kılavuz sayfasındaki tanıma uygun olarak
timegm(3)hataları denetleniyor chunked transfer-encodingkullanan yüklemelerdeki sorun çözüldü- location içindeki
fcgiparams’ın iki kez gönderilmesi engellendi dispatch_parentiçin uygun hata işleme eklendi- İptal edilen yanıtların
buffereventüzerinden doğru şekilde boşaltılması sağlandı scan-buildtarafından bulunan gereksiz depolama kaldırıldı- Veri kopyalanmadan önce
return_uri_lendoğrulanıyor
httpd(8)’nin yeni özellikleri ve kalan işler
- Özel HTTP başlıkları destekleniyor
- Daha iyi yapılandırma kalıtımı için location içinde
gzip-statickalıtımı eklendi - Daha fazla bayrak seçeneğini taşıyabilmesi için sunucu bayrakları 64 bit tamsayıya genişletildi
- Statik dosyalar için cache kontrolü eklendi
- Çalışma ilerledikçe backlog büyüdü; gelecekteki geliştirmeler için fikir ve geri bildirimler alınmaya devam ediliyor
1 yorum
Lobste.rs yorumları
Özel HTTP başlıkları desteğinin gelmesi sevindirici. Eskiden bu özellik olmadığı için basit kullanım durumlarında bile httpd kullanamıyordum; artık desteklenmesi güzel.
relayd(8) ve httpd(8) geliştirmesi duraklamıştı; birkaç katkıcı tech@ posta listesine yamalar göndermiş olsa da bunlar depoya pek yansıtılmamıştı. Asıl nedenin mevcut OpenBSD geliştiricilerinin artık bu daemon’larla ilgilenmemesi olduğu söyleniyor; bakımı devraldıkları için minnettarım.
İki yazılımı da düzenli olarak kullanıyorum; yeniden düzgün biçimde yönetiliyor olmaları sevindirici. Geliştirmenin durakladığından hiç haberim yoktu.
Basit yazılım yapısı sayesinde, büyük bir ekip olmadan da geliştirmeyi yeniden başlatıp bu kadar çok özellik ve düzeltmeyi dahil edebilmişler gibi görünüyor.
Yazılım adlarının sonundaki sayılar bir süre kafamı karıştırmıştı; bunların kılavuz bölüm numaraları olduğunu öğrendim.
1 çalıştırılabilir programları ve kabuk komutlarını, 2 sistem çağrılarını, 3 kütüphane çağrılarını, 4 özel dosyaları, 5 dosya biçimlerini ve kuralları, 6 oyunları, 7 diğer konuları, 8 sistem yönetimi komutlarını; standart dışı 9 ise çekirdek rutinlerini ifade eder.
man 1 manya da kısacaman mançalıştırabilirsiniz. ÖzellikleSEE ALSOkısmında yer alan çeşitliintrosayfaları faydalıdır.Bu iyileştirmelerin OpenBSD 8.0’a dahil edilip edilmeyeceğini merak ediyorum.
Bağlantının en baştan okunabilir olacak şekilde tasarlanıp tasarlanmadığını merak ediyorum. Android için Firefox’ta şöyle görünüyor:
https://imgur.com/a/oTimS9R
https://i.ibb.co/V0BgWFbV/image.png
https://hypertekst.net/Screenshot.png