तंग आ चुका हूँ, इसलिए एक ब्राउज़र लिख रहा हूँ
(adayinthelifeof.nl)- व्यक्तिगत रूप से ख़बरों से बचने का अनुभव आगे चलकर तकनीकी समाचारों तक पहुँचा, और बार-बार होने वाले नकारात्मक बदलावों के सामने असहाय महसूस करने के बाद उन्होंने खुद ब्राउज़र बनाने का फैसला किया
- Hacker News पर अनचाहे updates, subscription fee में बढ़ोतरी, privacy data collection, encryption ban पर चर्चा, और browser ecosystem पर control जैसे रुझानों का लगातार सामना हुआ
- इस बार सिर्फ़ बचने के बजाय, एक programmer के रूप में कोड बनाकर सार्वजनिक करने के तरीके से छोटी-सी प्रतिक्रिया देने की कोशिश की
- उनका मानना है कि परियोजना के पूरा होने या मुख्यधारा का ब्राउज़र बनने की संभावना कम है, और मदद न मिली तो यह जल्द रुक भी सकती है
- उम्मीद है कि एक non-commercial और खुला browser project दूसरों को प्रेरित करेगा और अधिक alternative projects की ओर ले जाएगा
ख़बरों से बचते-बचते ब्राउज़र विकास तक पहुँचने की कहानी
- लगभग 10 साल पहले, वे अक्सर कार से ग्राहकों के दफ्तर आते-जाते समय Netherlands के Business News Radio(BNR) या Radio 1 सुनते थे, लेकिन एक दिन रेडियो बंद करने के बाद उन्हें फिर से समाचार सुनने का मन नहीं हुआ
- उन्हें लगा कि ख़बरों में बार-बार सिर्फ़ बुरी बातें जैसे युद्ध और भ्रष्टाचार ही सुनाई देती हैं, और एक व्यक्ति के रूप में उन समस्याओं को हल करने का उनके पास कोई तरीका नहीं है
- इसके बाद उन्होंने समाचार सुनना, देखना और इंटरनेट पर समाचार खोजना टालना शुरू कर दिया; रात 8 बजे की ख़बरें शुरू होते ही वे चैनल बदल देते या उस कमरे से निकल जाते जहाँ समाचार चल रहे हों
- उनका मानना था कि ज़रूरी बातें लोगों के माध्यम से वैसे भी पता चल जाती हैं, इसलिए सामान्य समाचारों की जगह वे सिर्फ़ Reddit के कुछ subreddits और तकनीकी समाचार सीमित रूप से देखते रहे
तकनीकी समाचारों में भी वही असहायता बार-बार
- वे लगभग 98% तकनीकी समाचार Y Combinator के Hacker News के ज़रिए देखते थे, लेकिन समय के साथ वही भावना फिर बढ़ने लगी जो 10 साल पहले सामान्य समाचारों में महसूस हुई थी
- बार-बार सामने आने वाली समस्याएँ थीं अनचाहे updates, वादाखिलाफी, subscription fee बढ़ना, corporate acquisitions, और अधिक personal data इकट्ठा करने की कोशिशें
- उनका मानना है कि बच्चों के यौन अपराधियों का हवाला देकर encryption पर प्रतिबंध लगाने की सरकारी कोशिशें भी इसी समस्या का हिस्सा हैं
- browser एक विशेष रूप से महत्वपूर्ण क्षेत्र है, क्योंकि दुनिया भर के लगभग सभी लोग अपना समय यहीं बिताते हैं
- अगर browser खुद विज्ञापन दिखाए, तो site ads को रोकने वाले ad blockers के लिए उसका जवाब देना मुश्किल हो सकता है
- ऐसे उदाहरण रहे हैं जहाँ किसी खास browser के लिए बने extensions की वजह से दूसरी browsers पर किसी site का इस्तेमाल कठिन हो गया, और उनका मानना है कि अगर monopoly से बचने का रास्ता मिल भी जाए तो यह फिर दोहराया जा सकता है
खुद बनाने का कारण और कम अपेक्षाएँ
- इस बार सिर्फ़ बचने के बजाय, उन्होंने सोचा कि एक programmer के रूप में वे खुद ब्राउज़र विकसित कर सकते हैं और उसका कोड साझा कर सकते हैं
- ब्राउज़र बनाने के दो कारण बताए गए हैं
- बहुत छोटे स्तर पर ही सही, थोड़ा-सा प्रतिरोध करने की कोशिश
- लंबे समय से खुद एक browser बनाकर देखने की व्यक्तिगत इच्छा
- this project से बहुत बड़ी उम्मीदें नहीं हैं
- उन्हें उम्मीद नहीं कि यह पूरा हो जाएगा
- अगर मदद करने वाला कोई न मिला, तो यह जल्द बंद हो सकता है
- उन्हें उम्मीद नहीं कि यह मौजूदा बड़े browsers को हरा देने वाला प्रमुख browser बनेगा
- उनकी इच्छा है कि यह non-commercial उद्देश्य वाला, खुला project हो, जिससे दूसरे लोग प्रेरित हों और अपने projects बना सकें
- project की प्रगति codemusings.nl par pragati lekh में देखी जा सकती है
- project repository jaytaph/gosub-browser पर है
1 टिप्पणियां
Hacker News की राय
मैं OP हूँ। सकारात्मक/नकारात्मक/तटस्थ सभी comments के लिए धन्यवाद। कुछ बातें जोड़ूँ तो, यह सही है कि योगदान देने लायक browser projects पहले से बहुत हैं और वह तरीका ज्यादा efficient है, लेकिन तब आखिर में कुछ ही browser बचेंगे। मैं चाहता हूँ कि कई browser हों ताकि लोगों के पास विकल्प रहें
यह साफ तौर पर एक personal project है। यह काम मैं शायद सिर्फ tech industry से ऊब जाने की वजह से नहीं भी शुरू करता, लेकिन इस बेबसी पर गुस्सा है कि कुछ बदल नहीं सकता, और यह मेरा कुछ करने की कोशिश करने का तरीका है। मुझे उम्मीद नहीं है कि सचमुच एक browser पूरा बन जाएगा। मैं चाहता हूँ कि लोग मेरा code देखकर हँसें या उससे बेहतर ideas पाएं। उदाहरण के लिए, अगर whatwg site की तरह HTML5 tokenizer और parser algorithms step-by-step समझाए गए हों, तो किसी के लिए भी अपना HTML5 parser लिखना आसान हो जाता है। अगर Google या Microsoft अपनी market dominance के दम पर custom HTML5 का कोई बंद format, जैसे ghtml, बना दें तो उन्हें कौन रोक पाएगा? शून्य से शुरू करने की वजह यह है कि मैं नीचे के स्तर की तकनीकी मुश्किलों को और समझना चाहता हूँ
“news” की बदहाली पर कही बात से भी सहमत हूँ। psychological warfare में इसे morale sapping कहा जाता है। पहले दुश्मन विरोध की इच्छा तोड़ने और लोगों को बेबस बनाने वाला propaganda करता था, और इसका classic उदाहरण Lord Haw-Haw था। https://en.wikipedia.org/wiki/Lord_Haw-Haw
आजकल mainstream news channels और tech giants लोगों को स्थायी निराशा और anxiety में बाँधकर रखना चाहते हैं, ऐसा लगता है। tech discourse भी cynicism, avoidance, denial, resignation और learned helplessness का गड्ढा लगता है, और हाल में मैंने काफी interviews और sentiment analysis किए तो नतीजे डरावने थे। लगता है जैसे “tech” शब्द खुद “resistance is futile” का पर्याय बनता जा रहा है। सफलता की उम्मीद से नहीं, बल्कि उदाहरण पेश करने और अपनी sanity बचाए रखने के लिए कुछ भी करना सबसे सकारात्मक और मानवीय प्रतिक्रिया है
Linus Torvalds के अंदाज में कहें तो, “GNU जैसा बड़ा और professional कुछ बनाने की कोशिश नहीं, यह मेरे लिए है” वाले attitude से बनाते समय बहुत कम मेहनत में बहुत कुछ हासिल किया जा सकता है। ऐसा करने पर practical compromises किए जा सकते हैं, और learning के लिए हो या actual use के लिए, “product” बनाने की तुलना में बहुत कम effort से अपने लिए उपयोगी किसी चीज तक पहुँचा जा सकता है। मेरे personal projects भी कई बार ऐसे छोटे personal projects खोजकर उनके कुछ हिस्से reuse करते-करते बिल्कुल अलग दिशा में चले गए। किसी विशाल, पूरी तरह feature-complete beast को घटाने या fit करने से “काफी करीब” छोटे project को उठाना कहीं आसान है। browser की complexity बहुत हद तक इस बात से आती है कि उसे हर site और हर usage scenario को support करना पड़ता है, लेकिन अगर मैं अपने लिए बनाऊँ तो जिन sites की मुझे परवाह है उन्हें पर्याप्त अच्छे से चलाने पर focus कर सकता हूँ, जिससे समस्या काफी घट जाती है। काश और लोग “असंभव” projects आजमाएँ। पूरा project तुरंत दूसरों के काम न भी आए, तो भी उसके कुछ हिस्से उपयोगी हो सकते हैं, और कभी-कभी Linux की तरह छोटे personal project से बड़ी चीज निकल आती है
अगर किसी के project को बेकार time waste बताने में लगाए गए समय का आधा भी constructive काम में लगाया जाता, तो दुनिया में कहीं ज्यादा शानदार और दिलचस्प projects होते। बिल्कुल कोशिश न करने से बेहतर है कि किसी bold और ambitious काम में fail हुआ जाए
modern web browser की हर feature implement करने की जरूरत नहीं है। Battery API, game controller API, USB जैसी चीजों की जरूरत नहीं; अहम HTML, CSS, JS पर focus करें। सबसे बुरी स्थिति में भी आप कुछ नया सीखेंगे। project के लिए शुभकामनाएँ
“मुझे कुछ उम्मीद नहीं है, पूरा कर पाऊँगा इसकी भी उम्मीद नहीं है, मदद करने वाला कोई न मिला तो यह project जल्द मर जाएगा, market के giant players को गिरा देने वाला dominant browser बन जाएगा ऐसी उम्मीद नहीं है” वाली बात Linus ने comp.os.minix पर की गई Linux की पहली घोषणा जैसी लगती है
वह post “minix इस्तेमाल करने वालों, नमस्ते। मैं 386(486) AT clones के लिए एक free operating system बना रहा हूँ। यह बस hobby है, gnu जैसा बड़ा और professional नहीं होगा…” से शुरू हुई थी; उसमें कहा गया था कि bash और gcc port कर लिए गए हैं, कुछ महीनों में practical चीज निकल सकती है, implementation का वादा नहीं है लेकिन जो features चाहिए वे बताइए। आखिर में यह भी कहा था कि इसमें minix code बिल्कुल नहीं है, multithreaded file system है लेकिन portable नहीं है, और शायद AT hard disks के अलावा कुछ support नहीं करेगा
कोई नहीं जानता project कहाँ तक जाएगा। और अगर आप उसे अपनी वजहों से कर रहे हैं, तो एक तरह से यह मायने भी नहीं रखता
ब्राउज़र और open web को लेकर HN पर इतना नकारात्मक माहौल देखना मेरे लिए आम बात नहीं है। सफलता मिले या न मिले, मुझे यह बहुत मूल्यवान कोशिश लगती है
भले ही नतीजा सिर्फ़ ऐसा अधूरा ब्राउज़र हो जो बड़ी tech कंपनियों की मंशाओं से संचालित न हो, तब भी किसी दिन अगर Firefox पर निर्भर रहना बंद करना पड़े तो यह उपयोगी हो सकता है। मुझे Firefox बहुत पसंद है, इसलिए उम्मीद है वह दिन न आए, लेकिन मुझे एहसास हुआ कि web तक पहुँचते समय मेरा ब्राउज़र एक तरह की bottleneck है। वही content देखने के लिए दूसरी websites भी हैं, और इस्तेमाल करने के लिए दूसरे computer brands भी हैं, लेकिन बीच में हमेशा Firefox होता है। दूसरे browsers भी हैं, मगर ज़्यादातर Googlium पर या आजकल उसका जो भी नाम हो, उसी आधार पर बने लगते हैं। इसलिए मैं शुभकामनाएँ देता हूँ, सफलता की उम्मीद करता हूँ, और RSS feed subscribe करके कभी-कभी project पर नज़र डालने का सोच रहा हूँ
असल में इसके संभव होने के प्रमाण भी हैं। Ladybird शुरू से बनाया गया था, और मूल रूप से तो उसने C++ standard library तक खुद बनाई थी; 3–4 साल के part-time काम के बाद अब यह Discord भी, भले धीमे ही सही, चला लेता है। अब इसमें full-time developer भी है। GoSub के मामले में cargo.lock देखें तो लगता नहीं कि वे सब कुछ scratch से implement करना चाहते हैं, और image decoder जैसी चीज़ों के लिए ready-made components इस्तेमाल करने की संभावना ज़्यादा दिखती है, इसलिए इसके तेज़ी से बढ़ने की क्षमता भी हो सकती है
आज “browser को scratch से लिखना” दरअसल काफ़ी हद तक डिब्बे के अंदर portable operating system, यानी web platform को implement करना और उसे उन चीज़ों से compatible बनाना है जिन्हें Google ने अपने browser में जोड़ने का फ़ैसला किया है
Browser में features और APIs इतने विशाल हैं, और Google के लगातार feature बदलावों व dominance के साथ चलना इतना मुश्किल है कि Microsoft तक यह नहीं कर पाया। इससे जुड़ा एक personal project Tersenet है। https://github.com/runvnc/tersenet
यह लगभग बिना implementation वाला concept है, लेकिन requirements जानबूझकर ऐसी चुनी गई हैं ताकि लोग इसे implement कर सकें। यह पूर्ण web browser से कहीं कम जटिल है। GPT-4 के साथ संबंधित चर्चा भी है। https://chat.openai.com/share/16d02b78-f876-4c87-949a-a60b4f...
वास्तव में मौजूद और practical Gemini project भी संबंधित है। https://geminiprotocol.net/ इसी ने Tersenet idea को प्रेरित किया
WebSQL, IndexedDB, service workers, WebGL, WebGPU, WebBluetooth, WebRTC जैसी चीज़ों को बस ऐसे treat किया जा सकता है मानो वे मौजूद ही नहीं हैं। असली websites की 99%, यानी web “apps” नहीं बल्कि sites, कोई functionality नहीं खोएँगी
निजी तौर पर मैं Blink और उसके रिश्तेदार WebKit की monoculture, और Gecko/Quantum के अलावा भी और alternative engines देखना चाहूँगा। WebKit में absorb होने से पहले KHTML जिस जगह पर था, उसकी जगह लेने वाली कोई चीज़, या प्रयोग करने के लिए एक और open-source option हो तो अच्छा होगा
अच्छा होगा अगर इस सोच से काफ़ी सहमत लोग इस्तेमाल होने वाले subset पर सहमति बना लें, और ऐसा browser भी संतोषजनक हो सकता है जो Google browser की हर चीज़ न करे। मैं uMatrix से Google features का बड़ा हिस्सा बंद रखता हूँ, google.com domains को कभी allowlist में नहीं डालता, और फिर भी जैसे यह साबित कर रहा हूँ कि दुनिया खत्म नहीं होती। जो sites काम नहीं करतीं वे तुलनात्मक रूप से कम हैं
अधिकांश websites Google-specific तरीके से हाल में बनाई गई ad tech, AMP, DRM जैसी चीज़ें follow नहीं करना चाहतीं
शायद Mozilla और दूसरे लोगों को एक independent JavaScript “VM” बनानी चाहिए जिसे हर कोई इस्तेमाल कर सके
एक ऐसे व्यक्ति के रूप में जिसे “real” browser कैसे काम करता है इसका बिल्कुल पता नहीं था, फिर भी जिसने खुद browser लिखने का फैसला किया—वह भी custom layout engine तक बनाकर—मैं बस यही कहना चाहूँगा: कर डालिए
अपने code से website render होते देखना, code या output चाहे जितना भी बिखरा हुआ हो, बेहद संतोषजनक होता है। मेरा project करीब ढाई साल पुराना है और अब HN और simple blogs को ठीक-ठाक render कर लेता है। जिस w3m को replace करने का इरादा था, उससे objectively बेहतर है या नहीं—ज़रूरी नहीं; इसलिए कुछ कामों के लिए मैं अभी भी w3m पर लौट जाता हूँ। फिर भी यह उन कामों में उपयोगी निकला जिनके बारे में सोचा नहीं था, मैंने programming के बारे में बहुत कुछ सीखा, और किसी भी तरह इसका काम करना ही cool है। https://sr.ht/~bptato/chawan
ब्राउज़र बनाना मतलब rendering engine और layout engine बनाना है। यह असंभव काम नहीं, लेकिन काफ़ी बड़ा प्रोजेक्ट है
लेकिन ऐसे कई काम भी हैं जिनसे नतीजे मिलने की संभावना ज़्यादा है। Servo को Nyxt Browser पर पोर्ट करना, या WebKit/Servo/Gecko को fork करके पिछले 10 वर्षों में विज्ञापन कंपनियों द्वारा डाले गए, यूज़र के लिए हानिकारक और दखलअंदाज़ी करने वाले web standards को हटाया जा सकता है। अगर ये वे काम हैं जो शुरुआत से बनाते समय वैसे भी करने पड़ेंगे, तो शून्य से शुरू करने के बजाय किसी मौजूदा community से शुरू करना बेहतर है जो साथ काम करने को तैयार हो
Gecko तो monolith की परिभाषा के काफ़ी करीब है, इसलिए attack surface हटाना नामुमकिन है, और Tor तक internal API या bridge बदलने पर हर बार टूट जाने वाली खराब stub-replacement पद्धति इस्तेमाल करता है। हालांकि upstream के साथ अकेले तालमेल बनाए रखना असंभव है, इसलिए contributors और maintainers चाहिए। cybersecurity के नज़रिए से मैंने attack surface को जितना हो सके document किया है, और बाकी बचे काम तथा आखिरकार हटाई जाने वाली चीज़ें लिख दी हैं। https://github.com/tholian-network/retrokit/blob/main/SECURI...
मैं RetroKit को अपने Browser Stealth के webview के तौर पर इस्तेमाल करना चाहता हूँ, इसलिए यह काफ़ी subjective हो सकता है। Browser Stealth filtering proxy, scraper और decentralized cache की तरह काम करता है। https://github.com/tholian-network/stealth फिलहाल इसे golang में फिर से लिखा जा रहा है
इसे https://github.com/pop-os/cosmic-text जैसे text layout engine के साथ जोड़ना होगा, और यह अभी सभी features support नहीं करता। अभी जिन प्रमुख features की कमी है वे हैं
float,display: inline-block,box-sizing: content-box,position: static। लेकिन Block, Flexbox और CSS Grid support हैं और और भी जोड़े जा रहे हैंयह बड़ा काम ज़रूर है, लेकिन एक committed छोटी team के लिए सबसे असंभव काम नहीं है
reasonably simple HTML websites render करने से शुरुआत की जा सकती है, जल्दबाज़ी की कोई ज़रूरत नहीं, और standards के हर कोने को implement करना है—ऐसा कोई सख्त नियम भी नहीं। web browser और web शानदार ढंग से मानवीय हैं
मौजूदा engines लेकर उन्हें जोड़ना, और उन्हें इतना modular बनाना कि कभी भी बदला जा सके, फिर भी एक proper browser है। निजी तौर पर मुझे लगता है कि यहाँ लोग अंदरूनी gears पर ज़रूरत से ज़्यादा focus कर रहे हैं, जबकि असल में rendering/layout/scripting के अलावा भी बेहतर interface और दूसरे components चाहिए
समर्थन है। जारी रखिए
मैंने Python में ORC Solver algorithm का बहुत छोटा हिस्सा implement किया था, और rendering के लिए wxWidgets इस्तेमाल किया। text width calculate करने के लिए wxWidgets का text extent API इस्तेमाल किया। ORC Solver whitepaper यहाँ है। https://yuejiang-nj.github.io/Publications/2020CHI_ORCSolver...
मैं सोच रहा हूँ कि branch and bound कैसे implement करूँ, इसलिए इससे जुड़ी जानकारी हो तो अच्छा होगा। typesetting algorithm देखने के लिए शायद TeX codebase पढ़ना पड़ेगा, और layout bin packing के लिए JavaScript library Masonry इस्तेमाल करना भी बहुत दिलचस्प था
“अगर तुम्हें मेरा HTML चाहिए, तो मैं दे दूँगा! ढूँढो! दुनिया की हर चीज़ मैंने वहीं छोड़ दी है”
“और इस तरह hackers अपने सपने का पीछा करते हुए HyperText Line की ओर बढ़े, और दुनिया सचमुच महान browser युग में प्रवेश कर गई!”
कई वर्षों तक मैं मानता था कि browser एक ऐसी पहाड़ी है जिसे पार नहीं किया जा सकता, लेकिन अब लगता है कि धीरे-धीरे और लोग मानने लगे हैं कि हम यह कर सकते हैं। 2-second analysis के हिसाब से यह trend इसलिए दिख रहा है क्योंकि नए browser makers मौजूदा विशाल दैत्यों की नकल करके उनसे compete नहीं करना चाहते, बल्कि web को बदलना चाहते हैं। मुझे यह पसंद है
लेख के राजनीतिक हिस्से पर, दुनिया टूटी हुई है और सिर्फ टूटी हुई खबरें पढ़ना थका देने वाला काम है। लेकिन वास्तविकता से कटकर “गैर-राजनीतिक” बन जाना मानवता को छोड़ देने जैसा है—यानी अपने बच्चों और भांजे-भतीजों, और सबसे करीबी दोस्तों के बच्चों को छोड़ देना।
दुनिया बदलने की जरूरत भी नहीं है; अपने समुदाय में छोटे बदलाव ही काफी हैं। खासकर coder के तौर पर हम जो बनाते हैं, वह दुनिया भर के हजारों लोगों को प्रभावित कर सकता है और दिशा बदल सकता है। कभी-कभी सोचता हूं कि अगर हर कोई अपने समय का सिर्फ 3~5% समुदाय की मदद और किसी न किसी तरह की activism में लगाता, तो क्या हालात अलग होते?
खबरों में पढ़ी कोई भी चीज मेरे vote देने के तरीके को बदलने वाली नहीं है, जबकि शायद खबरें देखने की सबसे अच्छी वजह वही होनी चाहिए।
कहूं तो मैंने दुनिया से उम्मीद छोड़ दी है। लेकिन दूसरों के बच्चे मेरी जिम्मेदारी नहीं हैं। “सही काम” करने के लिए जितना दूसरे लोग करते हैं, उतना करता हूं, उससे ज्यादा नहीं। पहले मैं इन चीजों पर सोचता था, अपना व्यक्तिगत footprint घटाने की कोशिश करता था, sustainability और आने वाली पीढ़ियों के बारे में भी सोचता था, लेकिन उम्मीद खो दी। ऐसा लगता था जैसे धारा के विरुद्ध लड़ रहा हूं। अब बस इतना करता हूं कि मेरा footprint औसत से बड़ा न हो और आसपास के लोगों के साथ अच्छा व्यवहार करूं।
अगर Rust जरूरी है, तो Servo में contribute करते हुए छोटे PR भेजकर सीखना ज्यादा फायदेमंद लगता है। https://github.com/servo/servo
हालांकि मैं समझ सकता हूं, क्योंकि मैंने भी मौजूदा codebase पढ़ना मुश्किल लगा या लगा कि मैं बेहतर कर सकता हूं, इसलिए “शुरू से” project किए हैं। हर किसी का अपना तरीका होता है।
इसी तरह Servo को Firefox browser के हिस्सों को replace करने के लिए design किया गया था, इसलिए उसे “Gecko आकार” के छेद में fit होना था। उदाहरण के लिए Firefox के बाकी हिस्सों के साथ compatibility की वजह से कई जगह UTF-16 strings का इस्तेमाल होता है। आज के समय में modern Rust से Servo को फिर से लिखा जाए, तो शायद उसे छोटा, चुस्त और शायद ज्यादा तेज बनाया जा सके।