बेज़ेल विज़न

कोई भी सॉफ़्टवेयर डेवलपर, किसी भी प्रोजेक्ट को आसानी से बना सकता है, उसकी जांच कर सकता है, और उसे पैकेज कर सकता है. प्रोजेक्ट का साइज़ और जटिलता कुछ भी हो सकती है. इसके लिए, डेवलपर को ऐसे टूल मिलते हैं जिन्हें आसानी से अपनाया और बढ़ाया जा सकता है.

  • इंजीनियर, बुनियादी सिद्धांतों को हल्के में ले सकते हैं. सॉफ़्टवेयर डेवलपर, कोड लिखने की क्रिएटिव प्रोसेस पर फ़ोकस करते हैं, क्योंकि कोड बनाने और उसकी जांच करने की मैकेनिकल प्रोसेस को हल कर लिया जाता है. नई भाषाओं या संगठन की खास ज़रूरतों के हिसाब से बिल्ड सिस्टम को पसंद के मुताबिक बनाने के दौरान, उपयोगकर्ता एक्सटेंशन की उन सुविधाओं पर ध्यान देते हैं जो उनके इस्तेमाल के उदाहरण के लिए खास होती हैं. इसके लिए, उन्हें बुनियादी सुविधाओं को फिर से बनाने की ज़रूरत नहीं होती.

  • इंजीनियर आसानी से किसी भी प्रोजेक्ट में योगदान दे सकते हैं. अगर किसी डेवलपर को नए प्रोजेक्ट पर काम शुरू करना है, तो वह प्रोजेक्ट को क्लोन करके बिल्ड को चला सकता है. इसके लिए, लोकल कॉन्फ़िगरेशन की ज़रूरत नहीं होती. यह तुरंत काम करता है. क्रॉस-प्लैटफ़ॉर्म रिमोट एक्ज़ीक्यूशन की मदद से, वे किसी भी मशीन पर कहीं से भी काम कर सकते हैं. साथ ही, प्रोजेक्ट के टारगेट किए गए सभी प्लैटफ़ॉर्म पर, अपने बदलावों की पूरी तरह से जांच कर सकते हैं. इंजीनियर, नए प्रोजेक्ट के लिए बिल्ड को तुरंत कॉन्फ़िगर कर सकते हैं. इसके अलावा, वे मौजूदा बिल्ड को धीरे-धीरे माइग्रेट कर सकते हैं.

  • प्रोजेक्ट को किसी भी साइज़ के कोडबेस और किसी भी साइज़ की टीम के हिसाब से स्केल किया जा सकता है. तेज़ी से और चरण दर चरण टेस्टिंग करने की सुविधा की मदद से, टीमें किसी भी बदलाव को लागू करने से पहले उसकी पूरी तरह से पुष्टि कर सकती हैं. रिपॉज़िटरी बढ़ने, प्रोजेक्ट में कई रिपॉज़िटरी शामिल होने, और कई भाषाओं का इस्तेमाल होने पर भी यह सुविधा काम करती है. इंफ़्रास्ट्रक्चर, डेवलपर को टेस्ट कवरेज के लिए मजबूर नहीं करता है.

हमारा मानना है कि Bazel इस विज़न को पूरा कर सकता है.

Bazel को शुरू से ही इस तरह से बनाया गया है कि इससे ऐसे बिल्ड बनाए जा सकें जिन्हें फिर से बनाया जा सकता है. इसका मतलब है कि इनपुट का एक सेट हमेशा एक ही आउटपुट देगा. साथ ही, इन्हें पोर्ट किया जा सकता है. इसका मतलब है कि किसी भी मशीन पर बिल्ड को चलाया जा सकता है और इससे आउटपुट पर कोई असर नहीं पड़ेगा.

इन विशेषताओं से, सुरक्षित इंक्रीमेंटैलिटी (सिर्फ़ बदले गए इनपुट को फिर से बनाने से, डेटा के खराब होने का खतरा नहीं होता) और डिस्ट्रिब्यूटबिलिटी (बिल्ड ऐक्शन अलग-अलग होते हैं और इन्हें ऑफ़लोड किया जा सकता है) को बढ़ावा मिलता है. Bazel, सही तरीके से बिल्ड करने के लिए ज़रूरी काम को कम करता है. साथ ही, उस काम को कई कोर और रिमोट सिस्टम पर एक साथ करता है. इससे Bazel, किसी भी बिल्ड को तेज़ी से बना सकता है.

Bazel की ऐब्स्ट्रैक्शन लेयर में, भाषाओं, प्लैटफ़ॉर्म, और टूलचेन के लिए खास निर्देश होते हैं. इन्हें एक्सटेंशन के लिए इस्तेमाल की जाने वाली आसान भाषा में लागू किया जाता है. इससे Bazel को किसी भी कॉन्टेक्स्ट में आसानी से लागू किया जा सकता है.

Bazel की मुख्य क्षमताएं

  1. Bazel, कई भाषाओं और प्लैटफ़ॉर्म पर बिल्ड और टेस्ट करने की सुविधा देता है. एक ही कमांड का इस्तेमाल करके, पूरे सोर्स ट्री को बनाया और टेस्ट किया जा सकता है. इससे कोई फ़र्क़ नहीं पड़ता कि आपने भाषाओं और प्लैटफ़ॉर्म के किस कॉम्बिनेशन को टारगेट किया है.
  2. Bazel की मदद से, तेज़ी से और सही तरीके से बिल्ड बनाए जाते हैं. हर बिल्ड और टेस्ट रन, आपके डेवलपर की मशीनों और सीआई पर इंक्रीमेंटल होता है.
  3. Bazel, किसी भी भाषा या प्लैटफ़ॉर्म के लिए बिल्ड तय करने के लिए, एक जैसी, एक्सटेंसिबल भाषा उपलब्ध कराता है.
  4. Bazel, रिमोट एक्ज़ीक्यूशन और कैश मेमोरी की सेवाओं से कनेक्ट करके, आपकी बिल्ड प्रोसेस को स्केल करने की अनुमति देता है.
  5. Bazel, सभी मुख्य डेवलपमेंट प्लैटफ़ॉर्म (Linux, MacOS, और Windows) पर काम करता है.
  6. हम मानते हैं कि Bazel को अपनाने में समय लगता है, लेकिन इसे धीरे-धीरे अपनाया जा सकता है. Bazel, किसी भाषा/प्लैटफ़ॉर्म के लिए, स्टैंडर्ड टूल के साथ इंटरफ़ेस करता है.

भाषा से जुड़े समुदायों की सेवा करना

सॉफ़्टवेयर इंजीनियरिंग, भाषा कम्यूनिटी के हिसाब से विकसित होती है. आम तौर पर, ये ऐसे लोगों के ग्रुप होते हैं जो एक जैसे टूल और तरीकों का इस्तेमाल करते हैं.

किसी भाषा कम्यूनिटी के सदस्यों के लिए, अच्छी क्वालिटी वाले Bazel नियमों का उपलब्ध होना ज़रूरी है. ये नियम, उस कम्यूनिटी के वर्कफ़्लो और कन्वेंशनल तरीकों के साथ इंटिग्रेट होने चाहिए.

Bazel, एक्सटेंड किए जा सकने वाले और ओपन सोर्स टूल के तौर पर काम करता है. साथ ही, यह किसी भी भाषा के लिए अच्छे नियमों के सेट के साथ काम करता है.

अच्छे नियमों के सेट की ज़रूरी शर्तें

  1. नियमों में, भाषा के लिए बिल्डिंग और टेस्टिंग की सुविधा होनी चाहिए. इसमें कोड कवरेज भी शामिल है.
  2. नियमों को, भाषा के लिए ज़्यादातर इस्तेमाल किए जाने वाले "पैकेज मैनेजर" के साथ इंटरफ़ेस करना होगा. जैसे, Java के लिए Maven. साथ ही, नियमों को, ज़्यादातर इस्तेमाल किए जाने वाले अन्य बिल्ड सिस्टम से इंक्रीमेंटल माइग्रेशन पाथ के साथ काम करना होगा.
  3. नियमों को एक्सटेंसिबल और इंटरऑपरेबल होना चाहिए. इसके लिए, "Bazel sandwich" सिद्धांतों का पालन करना होगा.
  4. नियमों को रिमोट एक्ज़ीक्यूशन के लिए तैयार होना चाहिए. असल में, इसका मतलब है कि टूलचेन मेकेनिज़्म का इस्तेमाल करके कॉन्फ़िगर किया जा सकता है.
  5. अगर कोई भाषा है, तो नियमों (और Bazel) को उस भाषा के लिए ज़्यादा इस्तेमाल किए जाने वाले आईडीई के साथ इंटरफ़ेस करना होगा.
  6. नियमों के लिए, पूरी और इस्तेमाल की जा सकने वाली जानकारी होनी चाहिए. इसमें नए उपयोगकर्ताओं के लिए शुरुआती जानकारी और एक्सपर्ट उपयोगकर्ताओं के लिए पूरी जानकारी वाले दस्तावेज़ शामिल होने चाहिए.

ये सभी आइटम ज़रूरी हैं. ये सभी मिलकर ही, Bazel की क्षमताओं को अपने ईकोसिस्टम के लिए उपलब्ध कराते हैं.

ये शर्तें, आम तौर पर पूरी की जा सकती हैं. इन सभी शर्तों को पूरा करने के बाद, Bazel उस भाषा कम्यूनिटी के सदस्यों को पूरी तरह से फ़ायदे पहुंचाता है.