बेज़ेल विज़न

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

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

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

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

हमारा मानना है कि 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 उस भाषा की कम्यूनिटी के सदस्यों को पूरी तरह से फ़ायदे पहुंचाता है.