WebAssembly की मदद से, Google Earth को अलग-अलग ब्राउज़र से ऐक्सेस करने की सुविधा को बेहतर बनाना.
आदर्श स्थिति में, डेवलपर जिस भी टेक्नोलॉजी का इस्तेमाल करके ऐप्लिकेशन बनाते हैं वह ब्राउज़र में उपलब्ध होता है. हालांकि, प्रोजेक्ट को वेब पर लाने में कुछ समस्याएं आती हैं. ये समस्याएं इस बात पर निर्भर करती हैं कि प्रोजेक्ट को किस टेक्नोलॉजी का इस्तेमाल करके बनाया गया है और अलग-अलग ब्राउज़र वेंडर उस टेक्नोलॉजी के साथ कितनी अच्छी तरह काम करते हैं. WebAssembly (Wasm), W3C के मुताबिक कॉम्पाइल करने का टारगेट है. इसकी मदद से, वेब पर JavaScript के अलावा अन्य भाषाओं के कोडबेस चलाए जा सकते हैं. इससे, इस समस्या को हल करने में मदद मिलती है.
हमने Google Earth के साथ ऐसा ही किया है. यह आज WebAssembly पर बीटा वर्शन की झलक के तौर पर उपलब्ध है. ध्यान रखें कि यह Google Earth का बीटा वर्शन है. इसलिए, हो सकता है कि यह उतना आसान न हो जितना आपको पहले लगता था. वेब के लिए Google Earth का सामान्य वर्शन आज़माएं. इस बीटा वर्शन को Chrome और Chromium पर आधारित अन्य ब्राउज़र में आज़माया जा सकता है. इनमें Edge (कैनरी वर्शन), Opera, और Firefox शामिल हैं. अगर आपको भी अपने प्लैटफ़ॉर्म के हिसाब से बनाए गए ऐप्लिकेशन के लिए, अलग-अलग ब्राउज़र पर बेहतर सहायता चाहिए, तो इस बीटा वर्शन को आज़माएं.
हमने Google Earth के लिए WebAssembly को क्यों चुना
हमने Google Earth के ज़्यादातर हिस्से को C++ में लिखा था, क्योंकि यह इंस्टॉल करने के लिए बनाया गया एक डेस्कटॉप ऐप्लिकेशन था. इसके बाद, स्मार्टफ़ोन के ज़्यादा से ज़्यादा इस्तेमाल होने की वजह से, हमने इसे Android और iOS पर पोर्ट किया. इसके लिए, हमने NDK और Objective-C++ का इस्तेमाल करके, अपने ज़्यादातर C++ कोडबेस को बनाए रखा. साल 2017 में, जब हमने Earth को वेब पर उपलब्ध कराया, तब हमने C++ कोड को कंपाइल करने और उसे Chrome ब्राउज़र में चलाने के लिए, नेटिव क्लाइंट (NaCl) का इस्तेमाल किया.
उस समय, NaCl ही ब्राउज़र की ऐसी टेक्नोलॉजी थी जिसकी मदद से, हम अपने C++ कोड को ब्राउज़र पर पोर्ट कर पाते थे. साथ ही, हमें Earth की ज़रूरत के मुताबिक परफ़ॉर्मेंस भी मिलती थी. माफ़ करें, NaCl सिर्फ़ Chrome के लिए बनी टेक्नोलॉजी थी. इसे कभी भी दूसरे ब्राउज़र के लिए इस्तेमाल नहीं किया गया. अब हम WebAssembly पर स्विच कर रहे हैं. इससे, हम उसी कोड को सभी ब्राउज़र पर चला पाएंगे. इसका मतलब है कि Earth, वेब पर ज़्यादा लोगों के लिए उपलब्ध होगा.
थ्रेडिंग के बारे में थ्रेड
WebAssembly अब भी एक स्टैंडर्ड के तौर पर लगातार बेहतर हो रहा है. साथ ही, ब्राउज़र में ज़्यादा सुविधाएं और फ़ंक्शन जोड़े जा रहे हैं. Earth के हिसाब से, ब्राउज़र के बीच WebAssembly के लिए सहायता में सबसे अहम अंतर, थ्रेडिंग के लिए सहायता है. कुछ ब्राउज़र में मल्टी-थ्रेडिंग की सुविधा मिलती है और कुछ में नहीं. Earth को असल दुनिया के बड़े 3D वीडियो गेम की तरह समझें. इसलिए, हम ब्राउज़र पर लगातार डेटा स्ट्रीम कर रहे हैं, उसे डिकंप्रेस कर रहे हैं, और उसे स्क्रीन पर रेंडर करने के लिए तैयार कर रहे हैं. बैकग्राउंड थ्रेड पर यह काम करने से, ब्राउज़र में Earth की परफ़ॉर्मेंस में साफ़ तौर पर सुधार हुआ है.
मल्टी-थ्रेड वाली WebAssembly, SharedArrayBuffer नाम की ब्राउज़र सुविधा पर निर्भर करती है. Spectre और Meltdown की सुरक्षा से जुड़ी कमजोरियों का पता चलने के बाद, इसे ब्राउज़र से हटा दिया गया था. हमलों से होने वाले संभावित नुकसान को कम करने के लिए, Chrome की सुरक्षा टीम ने सभी डेस्कटॉप ऑपरेटिंग सिस्टम के लिए, Chrome में साइट आइसोलेशन की सुविधा शुरू की. साइट आइसोलेशन की सुविधा, हर रेंडरर प्रोसेस को सिर्फ़ एक साइट के दस्तावेज़ों तक सीमित कर देती है. सुरक्षा से जुड़ी इस सुविधा के लागू होने के बाद, Chrome ने डेस्कटॉप के लिए SharedArrayBuffer को फिर से चालू कर दिया. इससे, हमें Chrome for Earth के साथ मल्टी-थ्रेड वाली WebAssembly का इस्तेमाल करने की अनुमति मिली.
अन्य ब्राउज़र, SharedArrayBuffer को फिर से चालू करने के लिए, साइट आइसोलेशन या अन्य तरीकों पर काम कर रहे हैं. इस दौरान, Earth उन ब्राउज़र में सिंगल-थ्रेड मोड में चलता है.
अलग-अलग ब्राउज़र के साथ WebAssembly कैसे काम करता है
हमने Earth को पोर्ट करने वाले ब्राउज़र में, WebAssembly के साथ काम करने की सुविधा के बारे में काफ़ी कुछ जाना है. अगर आपको WebAssembly का इस्तेमाल करके ऐप्लिकेशन डेवलप करने हैं, तो यह समझना ज़रूरी है कि WebAssembly, अलग-अलग ब्राउज़र के साथ कैसे काम करती है.
Edge
Microsoft ने EdgeHTML रेंडरर से Chromium पर आधारित रेंडरर पर स्विच करने का फ़ैसला लिया है. इस वजह से, Edge में डेवलपर को दो अलग-अलग अनुभव मिलेंगे. फ़िलहाल, WebAssembly पर Google Earth का बीटा वर्शन, Edge के मौजूदा सार्वजनिक वर्शन पर काम नहीं करेगा. इसकी वजह यह है कि इसमें WebGL2 की सुविधा काम नहीं करती. आने वाले समय में, क्रोमियम पर आधारित Edge का नया वर्शन लॉन्च होने के बाद, यह समस्या ठीक हो जाएगी. इस दौरान, Edge का Canary वर्शन डाउनलोड करके देखा जा सकता है कि Earth अच्छी तरह से काम करता है.
Chrome
Chrome में WebAssembly के साथ-साथ डेस्कटॉप पर एक से ज़्यादा थ्रेड पर काम करने की सुविधा भी काम करती है. इसलिए, Earth को आसानी से चलाया जा सकता है. हालांकि, हमें उम्मीद है कि Chrome, WebAssembly में एक से ज़्यादा थ्रेड के साथ डाइनैमिक मेमोरी ऐलोकेशन की सुविधा जोड़ेगा. तब तक, हो सकता है कि Earth कम मेमोरी वाले डिवाइसों (जैसे, 32-बिट मशीनें) पर शुरू न हो.
Firefox
Firefox, WebAssembly के लिए अच्छी सुविधाएं देता है. हालांकि, उसने एक से ज़्यादा थ्रेड की सुविधा बंद कर दी है. इस वजह से, आपको Earth का इस्तेमाल करने में थोड़ी देरी हो सकती है. हमें उम्मीद है कि Mozilla, आने वाले वर्शन में एक से ज़्यादा थ्रेड की सुविधा को फिर से उपलब्ध कराएगा. हालांकि, Firefox में डाइनैमिक मेमोरी ऐलोकेशन की सुविधा काम करती है.
Opera
Opera, Chrome की तरह ही Chromium पर आधारित है. साथ ही, Edge के आने वाले वर्शन भी Chromium पर आधारित होंगे. हालांकि, Opera के मौजूदा वर्शन में सिर्फ़ एक थ्रेड वाली WebAssembly की सुविधा मिलती है. Earth, Opera में चलता है. हालांकि, इसमें कुछ हद तक खराब अनुभव मिलता है. हमें उम्मीद है कि Opera के नए वर्शन में, एक से ज़्यादा थ्रेड की सुविधा और बेहतर WebAssembly की सुविधा उपलब्ध होगी.
Safari
Safari में WebAssembly को बेहतर तरीके से लागू किया गया है. हालांकि, इसमें WebGL2 पूरी तरह काम नहीं करता. इसलिए, WebAssembly के साथ Earth, Safari में काम नहीं करता. खास तौर पर, हमारे कुछ शेडर के लिए GLSL 1.2 की ज़रूरत होती है. हमें उम्मीद है कि WebGL2 के लिए बेहतर सहायता जोड़ने के बाद, Earth Safari पर भी उपलब्ध हो जाएगा.
WebAssembly की सुविधाओं को ज़्यादा से ज़्यादा लोगों के बीच अपनाने की उम्मीद है
Earth को वेब पर उपलब्ध कराने के लिए, हमने बहुत मेहनत की है. हमने करीब छह साल पहले, asm.js पर आधारित इंटरनल डेमो के साथ शुरुआत की थी. इसे सालों तक बनाए रखा गया और इसमें कई बदलाव किए गए. इसके बाद, इसे Earth के WebAssembly वर्शन में बदल दिया गया, क्योंकि WebAssembly, W3C का अपनाया गया स्टैंडर्ड बन गया था.
हमें WebAssembly और Earth के लिए अब भी बहुत कुछ करना है. खास तौर पर, हम Emscripten (C++ कोड से WebAssembly जनरेट करने के लिए टूलचेन) का इस्तेमाल करके, LLVM बैकएंड पर जाना चाहते हैं. इस बदलाव से, आने वाले समय में SIMD के साथ-साथ, सोर्स लैंग्वेज कोड के लिए सोर्स मैप जैसे बेहतर डीबगिंग टूल काम करने लगेंगे. हमें उम्मीद है कि आने वाले समय में, OffscreenCanvas का इस्तेमाल किया जाएगा. साथ ही, WebAssembly में डाइनैमिक मेमोरी ऐलोकेशन की पूरी सुविधा भी उपलब्ध होगी. हालांकि, हमें पता है कि हम सही दिशा में आगे बढ़ रहे हैं: WebAssembly, वेब पर Earth के लिए आने वाले समय में बहुत काम की साबित होगी.
कृपया थोड़ा समय निकालकर, हमारा beta आज़माएं. सीधे Earth में सुझाव, राय या शिकायत करके हमें बताएं कि यह सुविधा आपके लिए कितनी कारगर है.