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