कोई भी सॉफ़्टवेयर डेवलपर, किसी भी साइज़ या जटिलता वाले प्रोजेक्ट को आसानी से बना सकता है, टेस्ट कर सकता है, और पैकेज कर सकता है. इसके लिए, वह ऐसे टूल का इस्तेमाल कर सकता है जिसे आसानी से अपनाया और बढ़ाया जा सकता है.
इंजीनियर, बुनियादी सिद्धांतों को हल्के में ले सकते हैं. सॉफ़्टवेयर डेवलपर, कोड लिखने की क्रिएटिव प्रोसेस पर ध्यान देते हैं. ऐसा इसलिए, क्योंकि कोड बनाने और उसकी जांच करने की मैकेनिकल प्रोसेस को हल कर लिया जाता है. नई भाषाओं या संगठन की खास ज़रूरतों के हिसाब से बिल्ड सिस्टम को पसंद के मुताबिक बनाने के दौरान, उपयोगकर्ता एक्सटेंशन की उन सुविधाओं पर ध्यान देते हैं जो उनके इस्तेमाल के उदाहरण के लिए खास होती हैं. इसके लिए, उन्हें बुनियादी प्लंबिंग को फिर से बनाने की ज़रूरत नहीं होती.
इंजीनियर आसानी से किसी भी प्रोजेक्ट में योगदान दे सकते हैं. अगर किसी डेवलपर को नए प्रोजेक्ट पर काम शुरू करना है, तो वह प्रोजेक्ट को क्लोन करके बिल्ड चला सकता है. इसके लिए, लोकल कॉन्फ़िगरेशन की ज़रूरत नहीं होती. यह अपने-आप काम करता है. क्रॉस-प्लैटफ़ॉर्म रिमोट एक्ज़ीक्यूशन की मदद से, वे किसी भी मशीन पर कहीं से भी काम कर सकते हैं. साथ ही, प्रोजेक्ट के टारगेट किए गए सभी प्लैटफ़ॉर्म पर, अपने बदलावों की पूरी तरह से जांच कर सकते हैं. इंजीनियर, नए प्रोजेक्ट के लिए बिल्ड को तुरंत कॉन्फ़िगर कर सकते हैं. इसके अलावा, वे मौजूदा बिल्ड को धीरे-धीरे माइग्रेट कर सकते हैं.
प्रोजेक्ट को किसी भी साइज़ के कोडबेस और किसी भी साइज़ की टीम के हिसाब से स्केल किया जा सकता है. तेज़ी से और चरण दर चरण टेस्टिंग करने की सुविधा की मदद से, टीमें हर बदलाव को लागू करने से पहले उसकी पूरी तरह से पुष्टि कर सकती हैं. रिपॉज़िटरी बढ़ने, प्रोजेक्ट के कई रिपॉज़िटरी में फैलने, और कई भाषाओं को शामिल करने के बावजूद, यह बात सही रहती है. इंफ़्रास्ट्रक्चर, डेवलपर को टेस्ट कवरेज के लिए बिल्ड स्पीड से समझौता करने के लिए मजबूर नहीं करता.
हमारा मानना है कि Bazel इस विज़न को पूरा कर सकता है.
Bazel को शुरू से ही इस तरह बनाया गया है कि इससे ऐसे बिल्ड बनाए जा सकें जिन्हें फिर से बनाया जा सकता है. इसका मतलब है कि इनपुट के किसी भी सेट के लिए, हमेशा एक ही आउटपुट मिलेगा. साथ ही, इन्हें पोर्ट किया जा सकता है. इसका मतलब है कि किसी भी मशीन पर बिल्ड को चलाया जा सकता है और इससे आउटपुट पर कोई असर नहीं पड़ेगा.
इन विशेषताओं से, सुरक्षित इंक्रीमेंटैलिटी (सिर्फ़ बदले गए इनपुट को फिर से बनाने से, डेटा के खराब होने का खतरा नहीं होता) और डिस्ट्रिब्यूटबिलिटी (बिल्ड ऐक्शन अलग-अलग होते हैं और इन्हें ऑफ़लोड किया जा सकता है) को बढ़ावा मिलता है. Bazel, सही तरीके से बिल्ड करने के लिए ज़रूरी काम को कम करता है. साथ ही, उस काम को कई कोर और रिमोट सिस्टम पर एक साथ करता है. इससे Bazel, किसी भी बिल्ड को तेज़ी से बना सकता है.
Bazel की ऐब्स्ट्रैक्शन लेयर में, भाषाओं, प्लैटफ़ॉर्म, और टूलचेन के लिए खास निर्देश होते हैं. इन्हें एक्सटेंशन के लिए इस्तेमाल की जाने वाली आसान भाषा में लागू किया जाता है. इससे Bazel को किसी भी कॉन्टेक्स्ट में आसानी से लागू किया जा सकता है.
Bazel की मुख्य क्षमताएं
- Bazel, कई भाषाओं और प्लैटफ़ॉर्म के साथ काम करता है. इससे बिल्ड और टेस्ट किए जा सकते हैं. एक ही कमांड चलाकर, पूरे सोर्स ट्री को बनाया और टेस्ट किया जा सकता है. इससे कोई फ़र्क़ नहीं पड़ता कि आपने भाषाओं और प्लैटफ़ॉर्म के किस कॉम्बिनेशन को टारगेट किया है.
- Bazel की मदद से, तेज़ी से और सही तरीके से बिल्ड तैयार किए जाते हैं. हर बिल्ड और टेस्ट रन, आपके डेवलपर की मशीनों और सीआई पर बढ़ता है.
- Bazel, किसी भी भाषा या प्लैटफ़ॉर्म के लिए बिल्ड को तय करने के लिए, एक जैसी, एक्सटेंसिबल भाषा उपलब्ध कराता है.
- Bazel, रिमोट एक्ज़ीक्यूशन और कैश मेमोरी की सेवाओं से कनेक्ट करके, आपकी बिल्ड प्रोसेस को स्केल करने की अनुमति देता है.
- Bazel, सभी मुख्य डेवलपमेंट प्लैटफ़ॉर्म (Linux, MacOS, और Windows) पर काम करता है.
- हम मानते हैं कि Bazel को अपनाने में समय लगता है, लेकिन इसे धीरे-धीरे अपनाया जा सकता है. Bazel, किसी भाषा/प्लैटफ़ॉर्म के लिए, डिफ़ैक्टो स्टैंडर्ड टूल के साथ इंटरफ़ेस करता है.
भाषाओं के आधार पर बने समुदायों को सेवाएं देना
सॉफ़्टवेयर इंजीनियरिंग, भाषा कम्यूनिटी के हिसाब से विकसित होती है. आम तौर पर, ये ऐसे लोगों के ग्रुप होते हैं जो एक जैसे टूल और तरीकों का इस्तेमाल करते हैं.
किसी भाषा कम्यूनिटी के सदस्यों के लिए, अच्छी क्वालिटी वाले Bazel नियमों का उपलब्ध होना ज़रूरी है. ये नियम, उस कम्यूनिटी के वर्कफ़्लो और कन्वेंशनल तरीकों के साथ इंटिग्रेट होने चाहिए.
Bazel, एक्सटेंड किए जा सकने वाले और ओपन सोर्स टूल के तौर पर काम करता है. साथ ही, यह किसी भी भाषा के लिए अच्छे नियमों के सेट के साथ काम करता है.
अच्छे नियम सेट की ज़रूरी शर्तें
- नियमों में, भाषा के लिए बिल्डिंग और टेस्टिंग की सुविधा होनी चाहिए. इसमें कोड कवरेज भी शामिल है.
- नियमों को, भाषा के लिए ज़्यादातर इस्तेमाल किए जाने वाले "पैकेज मैनेजर" के साथ इंटरफ़ेस करना होगा. जैसे, Java के लिए Maven. साथ ही, नियमों को, ज़्यादातर इस्तेमाल किए जाने वाले अन्य बिल्ड सिस्टम से, इंक्रीमेंटल माइग्रेशन पाथ के साथ काम करना होगा.
- नियमों को एक्सटेंसिबल और इंटरऑपरेबल होना चाहिए. इसके लिए, "Bazel sandwich" सिद्धांतों का पालन करना होगा.
- नियमों को रिमोट तरीके से लागू करने के लिए तैयार होना चाहिए. असल में, इसका मतलब है कि टूलचेन मेकेनिज़्म का इस्तेमाल करके कॉन्फ़िगर किया जा सकता है.
- अगर कोई भाषा है, तो नियमों (और Bazel) को उस भाषा के लिए ज़्यादातर इस्तेमाल किए जाने वाले आईडीई के साथ इंटरफ़ेस करना होगा.
- नियमों के बारे में पूरी और काम की जानकारी देने वाला दस्तावेज़ होना चाहिए. इसमें नए उपयोगकर्ताओं के लिए शुरुआती जानकारी और एक्सपर्ट उपयोगकर्ताओं के लिए पूरी जानकारी देने वाले दस्तावेज़ शामिल होने चाहिए.
ये सभी आइटम ज़रूरी हैं. ये सभी आइटम मिलकर ही, Bazel की क्षमताओं को अपने ईकोसिस्टम के लिए उपलब्ध कराते हैं.
ये शर्तें, आम तौर पर ज़रूरी होती हैं. इन सभी शर्तों को पूरा करने के बाद, Bazel उस भाषा की कम्यूनिटी के सदस्यों को पूरी तरह से फ़ायदे पहुंचाता है.