- मौजूदा OpenBSD डेवलपर्स की दिलचस्पी घटने से ठहर गया relayd(8) और httpd(8) डेवलपमेंट, वास्तविक संचालन जरूरतों वाले contributors की भागीदारी से फिर सक्रिय हुआ
- LLM के coding ज्ञान की जगह लेने के दौर में सीधे C सीखकर चुनौती लेने के फैसले से शुरुआत हुई, और relayd(8) के handmade imsg सिस्टम को modernize किया गया
- 2024~2026 के
tech@mailing list में पड़े unmerged patches और मौजूदा GitHub mirror के पुराने issues का अधिकांश निपटारा किया गया, और नए contributors के लिए Git mirror और README भी तैयार किए गए - relayd(8) ने सुरक्षित imsg API और TLS·request parsing security को मजबूत किया और reload collision को ठीक किया; httpd(8) ने request smuggling defense, custom headers, static file cache control आदि जोड़े
- दोनों daemons की security·stability·scalability साथ-साथ बेहतर हुई, लेकिन काम के दौरान backlog भी बढ़ा, इसलिए ideas और feedback लगातार लिए जा रहे हैं
दिलचस्पी खो चुके project को फिर से जीवित करने की पृष्ठभूमि
- OpenBSD 7.8 के प्रमुख बदलावों में जैसा बताया गया था,
relayd(8)औरhttpd(8)का development ठहरा हुआ था- कई contributors ने
tech@mailing list पर patches भेजे, लेकिन repository में बहुत कम merge हुए - मुख्य कारण यह था कि मौजूदा OpenBSD developers ने इन दोनों daemons में अब रुचि नहीं रखी
- कई contributors ने
kirill@के साथ दोनों daemons को नियमित रूप से इस्तेमाल करने और वास्तविक use cases संभालने के अनुभव के आधार पर सक्रिय development शुरू किया गया- जटिल
httpd(8)·relayd(8)configurations के साथ OpenBSD customers को support करने की practical demand भी सीधा प्रेरक कारण बनी
- जटिल
LLM युग में C पर लौटने की वजह
- सबसे बड़ा कारण LLM का उदय था
- पहले आधुनिक C++ code पेशेवर रूप से लिखा जाता था, लेकिन बाद में solution architecture, platform engineering और team building की ओर जाने से वास्तविक code लगभग लिखना बंद हो गया
- काम मुख्यतः declarative YAML लिखने और OpenBSD
ports(7)के लिए code पढ़ने व porting करने तक सीमित रह गया
- “coding solved है” जैसे दावों के उलट, यह माना गया कि जब ज्ञान बाहर outsource हो रहा हो, तब उस ज्ञान को खुद हासिल करना और भी महत्वपूर्ण है
- C++ और Rust कुछ कठिन फैसलों में मदद कर देते हैं, लेकिन C ऐसा नहीं करता — इसी को challenge मानकर
relayd(8)औरhttpd(8)में contribute करने का निर्णय लिया गया
motivation से ज्यादा discipline के सहारे योगदान जारी रहा
- open source contribution कुछ ही हफ्तों में निराशा पर खत्म हो सकता है, लेकिन शुरुआती तकलीफदेह चरण के बाद लगातार काम कर पाने की स्थिति तक पहुंचा गया
- शुरुआत में codebase को passive तरीके से पढ़ते हुए कई जगह निराशा हुई
- कम comments, कुछ खराब design, और जटिल रूप से उलझा हुआ code इसके कारण थे; यह C code की प्रकृति थी या अपने अनुभव की कमी, यह अभी साफ नहीं
- OpenBSD daemon maintainers से चर्चा के बाद हाथ से बनाए गए imsg message system को modernize करने का फैसला किया गया
- पहले
relayd(8)पर focus किया गया, फिर scope कोhttpd(8)तक बढ़ाया गया - modernization को codebase समझने के साधन के रूप में इस्तेमाल किया गया
- पहले
unmerged patches और पुराने issues का निपटारा
- 2024~2026 की
tech@mailing list archives की समीक्षा कर pending patches और issues इकट्ठे किए गए, और माना गया कि उनमें से अधिकांश को handle कर लिया गया है - इन दोनों daemons को मूल रूप से Reyk Floeter ने develop किया था, जो अब OpenBSD से retired हैं
- Reyk द्वारा maintain किए गए relayd GitHub mirror के पुराने issues भी review किए गए
- सभी issues या तो close हो सकते हैं या fix किए जा सकते हैं, और कुछ अब valid नहीं रहे
नए contributors के लिए Git mirror
- मौजूदा GitHub mirror से प्रेरणा लेकर, नए और युवा contributors की entry आसान करने और OpenBSD mailing list से बाहर की communities से भी संपर्क बनाने के लिए अलग mirror बनाया गया
- CVS tree को Git mirror के रूप में इस्तेमाल किया जाता है; development पहले Gothub instance पर किया जाता है और फिर बाकी repositories में sync किया जाता है
- Primary: https://rsadowski.gothub.org/
- Mirror: https://codeberg.org/rsadowski/relayd
- Mirror: https://github.com/sizeofvoid/relayd
httpd(8)पर भी यही तरीका लागू किया गया और जरूरी जानकारी के साथ विस्तृतREADME.mdलिखा गया
relayd(8) का modernization और code quality
- imsg system को अधिक सुरक्षित
imsg_get_data,imsg_get_type,imsgbuf_getaccessors पर migrate किया गया - imsg payload पढ़ने की पूरी प्रक्रिया में उचित error handling जोड़ी गई
bgpdके साथ consistency रखने के लिए logging और comments को standardize किया गया- HTTP start line handling को dedicated function में अलग कर code organization बेहतर किया गया
knfmtformat लागू किया गया
relayd(8) में security enhancements
- default TLS cipher suite को
HIGH:!aNULLसेsecureमें बदला गया - CA privilege separation (privsep) engine में ECDSA support जोड़ा गया
- duplicate
Content-Lengthheaders को HTTP 400 response के साथ reject किया गया - RFC 9112 5.2 के अनुसार parser differences रोकने के लिए
obs-foldheaders को allow नहीं किया गया - process ID की जांच की गई और
IMSG_CTL_PROCFDको parent process तक सीमित किया गया - sensitive password data हटाने के लिए
explicit_bzeroका इस्तेमाल किया गया
relayd(8) के bugs और stability improvements
- crash का कारण बन रही reload race condition को ठीक किया गया
X509_dup,config_purge,tls_cfgसे जुड़े कई memory leaks हटाए गए- NULL checks और bounds checks ठीक किए गए
- OpenSSL failures के लिए उचित error handling जोड़ी गई
- TLS failure पर OpenSSL error queue खाली करने के लिए बदलाव किया गया
relayd(8) में जोड़ी गई capabilities
MKCALENDARHTTP method support किया गया- कई listeners पर TLS इस्तेमाल करना संभव हुआ
- name resolution वाली कई addresses support की गईं
- certificates, keys और OCSP staple के paths explicit रूप से set किए जा सकते हैं
- HTTP health check requests में
User-Agentset किया गया - body-less HTTP responses को सही तरीके से handle किया गया
httpd(8) का modernization और code quality
proc.cको नए imsg API पर migrate करrelayd(8)के साथ consistency रखी गई- भविष्य में configuration options को आसानी से expand करने के लिए token order बदला गया
bgpdके साथ consistency रखने के लिए logging को standardize किया गया- duplicate code और empty functions हटाए गए
knfmtformat लागू किया गया- built-in features handling को dedicated function में अलग किया गया
httpd(8) में security enhancements
- default TLS cipher suite को
compatसेsecureमें बदला गया - request smuggling attacks रोकने के लिए CL.TE request framing reject की गई
- RFC 9112 5.2 के अनुसार
obs-foldheaders पर HTTP 400 से response दिया गया Content-LengthऔरTransfer-Encodingheaders साथ मौजूद हों तो इसे error माना गया- अतिरिक्त protection के लिए boot पर random relinking किया गया
- process ID की जांच की गई और
IMSG_CTL_PROCFDको parent process तक सीमित किया गया - response में server identification छिपाने के लिए
no banneroption जोड़ा गया
httpd(8) के bugs और stability improvements
- HTTP request की suffix range handling ठीक की गई
server_http_time()को GMT time सही तरह से output करने के लिए fix किया गया- manual specification के अनुसार
timegm(3)की errors check की गईं chunked transfer-encodingइस्तेमाल करने वाली uploads की समस्या हल की गई- location के
fcgiparamsको दो बार भेजे जाने से रोका गया dispatch_parentमें उचित error handling जोड़ी गई- interrupted responses को
buffereventके जरिए सही तरीके से flush करने के लिए बदलाव किया गया scan-buildद्वारा पाए गए unnecessary stores हटाए गए- data copy करने से पहले
return_uri_lenको validate किया गया
httpd(8) की नई capabilities और बाकी काम
- custom HTTP headers support किए गए
- बेहतर configuration inheritance के लिए location में
gzip-staticinherit किया गया - अधिक flag options समायोजित करने के लिए server flags को 64-bit integer में expand किया गया
- static files के लिए cache control जोड़ा गया
- काम आगे बढ़ने के साथ backlog बढ़ा है, और future development के लिए ideas और feedback लगातार लिए जा रहे हैं
1 टिप्पणियां
Lobste.rs की राय
कस्टम HTTP हेडर का सपोर्ट देखकर अच्छा लगा। पहले यह फीचर नहीं था, इसलिए साधारण कामों के लिए भी httpd इस्तेमाल नहीं कर पाता था, अब सपोर्ट मिलना अच्छी बात है
relayd(8) और httpd(8) का डेवलपमेंट ठहर गया था, और कई contributors ने tech@ mailing list पर patches भेजे थे, लेकिन वे repository में लगभग शामिल नहीं हुए। लगता है मुख्य वजह यह थी कि मौजूदा OpenBSD developers की इन daemons में अब दिलचस्पी नहीं रही थी। मेंटेनेंस संभालने के लिए धन्यवाद
मैं इन दोनों software का नियमित रूप से उपयोग करता हूँ, इसलिए इन्हें फिर से ठीक से maintain होते देख खुशी हुई। डेवलपमेंट ठहरा हुआ था, यह मुझे बिल्कुल पता नहीं था
शायद सरल software structure की वजह से बड़े team के बिना भी डेवलपमेंट दोबारा शुरू करके इतने सारे features और fixes शामिल किए जा सके
software के नाम के बाद लगे नंबर मुझे काफ़ी समय तक भ्रमित करते रहे, लेकिन बाद में पता चला कि वे manual section numbers हैं
1 executable programs·shell commands, 2 system calls, 3 library calls, 4 special files, 5 file formats·conventions, 6 games, 7 miscellaneous, 8 system administration commands, और non-standard 9 kernel routines को दर्शाता है
man 1 manया छोटा करकेman manचलाकर man(1) देख सकते हैं। खास तौर परSEE ALSOमें आने वाले अलग-अलगintropages उपयोगी हैंसोच रहा हूँ कि क्या ये सुधार OpenBSD 8.0 में शामिल होंगे
समझ नहीं आ रहा कि लिंक मूल रूप से पढ़ने योग्य बनाए गए थे या नहीं। Android के Firefox में यह इस तरह दिखता है
https://imgur.com/a/oTimS9R
https://i.ibb.co/V0BgWFbV/image.png
https://hypertekst.net/Screenshot.png