14 पॉइंट द्वारा GN⁺ 2024-08-27 | 2 टिप्पणियां | WhatsApp पर शेयर करें
  • Chromium/Google Chrome वेब ब्राउज़र के एक bug को पहली बार ठीक करते हुए एक बड़े open source प्रोजेक्ट में योगदान दिया।
  • यह पहले के open source काम से काफ़ी अलग और अनोखा अनुभव था।
  • इस प्रक्रिया के ज़रिए, ऐसे ही काम की कोशिश करने वाले डेवलपर्स की मदद के लिए पूरे अनुभव को दर्ज किया गया।

bug

  • जिस bug को ठीक किया गया, वह Chromium Devtools और AudioWorklet जैसे worklet, जो main thread के बाहर चलते हैं, की network requests के बीच integration की समस्या थी।
  • Worklet द्वारा बनाई गई network requests Devtools के network tab में बिल्कुल दिखाई नहीं देती थीं।
  • "Disable Cache" विकल्प को अनदेखा किया जा रहा था, जिससे development के दौरान पुराना code cache से हट नहीं रहा था।
  • यह समस्या कई प्रोजेक्ट्स में लगातार सामने आ रही थी और कम-से-कम तीन error reports से मेल खाती थी।
  • न्यूनतम reproduction आसान था, और cache headers सेट किए गए script का उपयोग करके AudioWorkletProcessor बनाया गया तथा page reload करके इस समस्या को दोहराया जा सकता था।

Chromium code डाउनलोड और build

  • bug को वास्तव में ठीक करने का पहला कदम Chromium को scratch से build करना था।
  • अच्छी बात यह थी कि प्रमुख operating systems पर build करने के तरीके की विस्तृत documentation उपलब्ध थी।
  • एक शक्तिशाली कंप्यूटर इस्तेमाल करने के बावजूद, पहली build में 45 मिनट से ज़्यादा लगे, RAM usage 50GB से अधिक था, और 100GB से ज़्यादा disk space चाहिए था।
  • incremental builds 10 सेकंड के भीतर तेज़ी से पूरी हो जाती थीं।
  • build में समय लगता है, लेकिन एक बार सभी ज़रूरी prerequisites install हो जाने पर यह काफ़ी हद तक अपने आप चलने वाला सुविधाजनक काम था।

bug ढूँढना और ठीक करना

  • build environment काम करने के बाद, code exploration शुरू किया गया।
  • Chromium codebase बहुत विशाल था, और उसकी समग्र संरचना को समझना आसान नहीं था।
  • code के भीतर कई indirect references और modularization के कारण code navigation मुश्किल था, और dynamic dispatch का व्यापक उपयोग किया गया था।
  • printf debugging का उपयोग करके network request शुरू होने की जगह से लेकर request के वास्तव में बनने या cache से प्राप्त होने तक उसे trace किया गया।
  • समस्या इसलिए थी क्योंकि InspectorNetworkAgent worklet target के लिए बनाया ही नहीं जा रहा था।
  • इसे ठीक करने के लिए InspectorNetworkAgent को WorkerGlobalScope के बजाय WorkerOrWorkletGlobalScope स्वीकार करने के लिए बदला गया।
  • लेकिन यह fix पर्याप्त नहीं था, और Devtools frontend के TypeScript code को देखने पर पता चला कि Type.Worklet के लिए Capability.Networking गायब था।
  • इसे जोड़ने के बाद समस्या पूरी तरह हल हो गई।

testing और code review

  • debug logs साफ़ करने और diff की अंतिम जाँच के बाद, code को review और merge कराने की प्रक्रिया को समझा गया।
  • Chromium Gerrit code review साइट पर account बनाया गया और CLA पर हस्ताक्षर किए गए।
  • reviewer चुना गया, लिखे गए code की समीक्षा की गई, और ज़रूरी tests जोड़े गए।
  • Devtools की network inspection functionality को test करने वाले कई JavaScript tests का संदर्भ लेकर नए tests लिखे गए।
  • अंत में code review में "LGTM" स्वीकृति मिली और PR merge हो गया।

दूसरा CL

  • devtools_frontend repository में worklet Devtools target के लिए Capability.Network जोड़ने वाले बदलाव हेतु एक और CL लिखा गया।
  • यह पहले PR की तरह ही आगे बढ़ा, और CI tests पास होने के बाद अपने आप merge हो गया।

रिलीज़

  • Chrome Canary में fix शामिल वाला version जारी होने तक इंतज़ार किया गया।
  • Chrome Canary दिन में दो बार update होता है, और अंततः fix की पुष्टि कर ली गई।
  • इस fix को पूरा करने में एक महीने से ज़्यादा लगा, और इसे Chrome 130 version में stable release channel में शामिल किया जाना था।

परिणाम और पुनरावलोकन

  • bug fix में समय लगा और काफ़ी मेहनत लगी, लेकिन यह बहुत अनोखा अनुभव था।
  • Chromium जैसे बड़े पैमाने पर software development कैसे होता है, इसका प्रत्यक्ष अनुभव मिला।
  • व्यक्तिगत रूप से यह तथ्य बहुत प्रेरक था कि लिखा गया code दुनिया भर में लाखों, या शायद अरबों, devices तक पहुँचेगा।
  • इस अनुभव से Chromium में योगदान देने का तरीका सीखा गया, और आगे भी ऐसे और bug fixes आज़माने की योजना है।

2 टिप्पणियां

 
huiya 2024-08-27

कमाल है

 
GN⁺ 2024-08-27
Hacker News की राय
  • Chromium codebase पर काम करने का अनुभव

    • कोड पर काम करने के लिए Sublime Text का इस्तेमाल किया और इसे plain text की तरह हैंडल किया
    • VS Code इस्तेमाल करने पर function definition या declaration पर jump करने जैसी सुविधाएँ मिल सकती हैं
    • जो लोग Chromium-आधारित browser बनाना चाहते हैं, उन्हें अपना लेख पढ़ने की सलाह दी
  • VS Code के C++ extension की समस्या

    • बड़े codebase की वजह से VS Code का C++ extension ठीक से काम नहीं करता
    • CPU cores 100% पर अटक जाने की समस्या होती है
    • Chromium Code Search tool उपयोगी है
  • Chrome bug का अनुभव

    • Linux पर Chrome-आधारित browser में "±±±±±±+..." input होने वाला bug आया
    • दूसरे applications में यह नहीं होता
    • bug को reproduce करके उसे ठीक करना चाहते हैं
  • Chromium codebase के साथ पहला अनुभव

    • पहली बार Chromium codebase को explore करना उतना मुश्किल नहीं था
    • Windows में image paste bug को ठीक करने के लिए Chrome के code को reference किया
  • Chrome build requirements

    • Chrome की build requirements बहुत ज़्यादा हैं
    • high-performance workstation की ज़रूरत होती है
    • Firefox का build time भी लंबा होता है
  • printf debugging

    • printf debugging इस्तेमाल करने में शर्माने की ज़रूरत नहीं है
    • printf debugging बहुत प्रभावी है
  • online code browser इस्तेमाल करने की सिफारिश

    • code को explore करने के लिए online code browser इस्तेमाल करने की सलाह दी
    • cs.chromium.org URL याद रखना आसान है
  • WorkletGlobalScope और WorkerGlobalScope का अंतर

    • इन दोनों terms का फर्क समझने में समय लगा
    • naming convention अच्छी नहीं है
  • Chromium bug fix करने का सुझाव

    • Chromium bug को fix करने की सलाह दी
    • Chrome तेज़ी से update होता है, इसलिए 4-6 हफ्तों में bug fix हो सकता है
    • bug fix में योगदान देने वाले लोगों को ढूंढना चाहते हैं
  • image copy bug का अनुभव

    • Chrome-आधारित browser में image को clipboard पर copy करते समय UI freeze हो जाता था
    • यह PNG encoding की समस्या की वजह से हुआ
    • compression level को 0 में बदलकर समस्या ठीक की
    • Firefox में कोई delay नहीं होता और वह original image file को clipboard में रखता है