- 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 टिप्पणियां
कमाल है
Hacker News की राय
Chromium codebase पर काम करने का अनुभव
VS Code के C++ extension की समस्या
Chrome bug का अनुभव
Chromium codebase के साथ पहला अनुभव
Chrome build requirements
printf debugging
online code browser इस्तेमाल करने की सिफारिश
WorkletGlobalScope और WorkerGlobalScope का अंतर
Chromium bug fix करने का सुझाव
image copy bug का अनुभव