बेज़ेल विज़न

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

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

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

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

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