Bazel का रोडमैप

Bazel को आपकी ज़रूरतों के हिसाब से लगातार बेहतर बनाया जा रहा है. इसलिए, हम 2025 के लिए अपने रोडमैप का अपडेट शेयर करना चाहते हैं.

हम Bazel 9.0 लंबे समय तक सहायता (एलटीएस) को 2025 के आखिर में आपके लिए उपलब्ध कराएंगे.

Bzlmod पर पूरी तरह से ट्रांज़िशन करना

Bazel 7 के बाद से, Bzlmod, Bazel में बाहरी डिपेंडेंसी के लिए स्टैंडर्ड सिस्टम रहा है. इसने लेगसी WORKSPACE सिस्टम की जगह ले ली है. मार्च 2025 तक, बेसल सेंट्रल रजिस्ट्री में 650 से ज़्यादा मॉड्यूल मौजूद हैं.

Bazel 9 में, हम WORKSPACE फ़ंक्शन को पूरी तरह से हटा देंगे. साथ ही, Bazel में बाहरी डिपेंडेंसी जोड़ने का सिर्फ़ एक तरीका होगा, यानी कि Bzlmod. हम माइग्रेशन की लागत को कम करने के लिए, माइग्रेशन से जुड़ी गाइड और टूल को बेहतर बनाने पर फ़ोकस करेंगे.

इसके अलावा, हमारा मकसद शेयर की गई रिपॉज़िटरी की बेहतर कैश मेमोरी (#12227 देखें) को लागू करना है. इसमें कचरा इकट्ठा करने की सुविधा भी होगी. साथ ही, हम इसे Bazel 8 पर वापस पोर्ट कर सकते हैं. Bazel Central Registry, SLSA attestations की पुष्टि करने में भी मदद करेगा.

Android, C++, Java, Python, और Proto के नियमों को माइग्रेट करना

Bazel 8 में, हमने Android, Java, Python, और Proto नियमों के लिए, Bazel कोडबेस से Starlark नियमों में सहायता को माइग्रेट कर दिया है. माइग्रेशन को आसान बनाने के लिए, हमने Bazel में ऑटोलोड की सुविधाएं लागू की हैं. इन्हें --incompatible_autoload_externally और --incompatible_disable_autoloads_in_main_repo फ़्लैग से कंट्रोल किया जा सकता है.

Bazel 9 में, हमारा लक्ष्य डिफ़ॉल्ट रूप से ऑटोलोड की सुविधा बंद करना है. साथ ही, हर प्रोजेक्ट के लिए यह ज़रूरी है कि वह BUILD फ़ाइलों में ज़रूरी नियमों को साफ़ तौर पर लोड करे.

हम C++ भाषा के ज़्यादातर सपोर्ट को Starlark में फिर से लिखेंगे. साथ ही, इसे Bazel बाइनरी से अलग करके /rules_cc रिपॉज़िटरी में ले जाएंगे. यह आखिरी ऐसी मुख्य भाषा है जिसके लिए अब भी Bazel में सहायता उपलब्ध है.

हम C++, Java, और Proto नियमों के लिए यूनिट टेस्ट को Starlark में पोर्ट कर रहे हैं. साथ ही, हम उन्हें लागू करने के बगल में मौजूद रिपॉज़िटरी में ले जा रहे हैं, ताकि नियम बनाने वालों की संख्या बढ़ाई जा सके.

Starlark में किए गए सुधार

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

Starlark में एक्सपेरिमेंट के तौर पर टाइप सिस्टम उपलब्ध होगा. यह Python के टाइप एनोटेशन की तरह होगा. हमें उम्मीद है कि Bazel 9 लॉन्च होने के बाद, टाइप सिस्टम स्थिर हो जाएगा.

कॉन्फ़िगर करने की सुविधा

हमारा मुख्य फ़ोकस, बिल्ड फ़्लैग की लागत और भ्रम को कम करना है.

हम प्रोजेक्ट कॉन्फ़िगरेशन के एक नए मॉडल पर एक्सपेरिमेंट कर रहे हैं. इसमें उपयोगकर्ताओं को यह जानने की ज़रूरत नहीं होगी कि किस बिल्ड और टेस्ट फ़्लैग को कहां सेट करना है. इसलिए, $ bazel test //foo, foo के प्रोजेक्ट की नीति के आधार पर सही फ़्लैग अपने-आप सेट कर देता है. यह सुविधा, Android 9.0 में एक्सपेरिमेंट के तौर पर उपलब्ध रहेगी. हालांकि, इस बारे में सुझाव/राय देने या शिकायत करने का स्वागत है.

फ़्लैग स्कोपिंग की मदद से, प्रोजेक्ट की सीमाओं से बाहर जाने पर Starlark फ़्लैग हटाए जा सकते हैं. इससे, ट्रांज़िटिव डिपेंडेंसी पर कैश मेमोरी काम करती रहती है. इन डिपेंडेंसी के लिए, फ़्लैग की ज़रूरत नहीं होती. इससे ट्रांज़िशन का इस्तेमाल करने वाले बिल्ड को कम समय में और कम खर्च में बनाया जा सकता है. यहां एक उदाहरण दिया गया है. यहां हम इस आइडिया को आगे बढ़ा रहे हैं, ताकि यह कंट्रोल किया जा सके कि कौनसे फ़्लैग exec configurations पर लागू हों. साथ ही, हम कस्टम स्टार्लार्क जैसे ज़्यादा फ़्लेक्सिबल सपोर्ट पर विचार कर रहे हैं, ताकि यह तय किया जा सके कि कौनसे डिपेंडेंसी एज पर फ़्लैग लागू होने चाहिए.

हम Bazel से बिल्ट-इन भाषा के फ़्लैग को Starlark में ले जाने के लिए, ज़्यादा प्राथमिकता दे रहे हैं. इससे वे फ़्लैग, नियमों की परिभाषाओं के साथ काम कर पाएंगे.

रिमोट एक्ज़ीक्यूशन में सुधार

हम एसिंक्रोनस एक्ज़ीक्यूशन के लिए सहायता जोड़ने का प्लान कर रहे हैं. इससे पैरललिज़्म को बढ़ाकर, रिमोट एक्ज़ीक्यूशन को तेज़ किया जा सकेगा.


रोडमैप से जुड़े अपडेट पाने और प्लान की गई सुविधाओं के बारे में चर्चा करने के लिए, slack.bazel.build पर जाकर, कम्यूनिटी के Slack सर्वर से जुड़ें.

इस रोडमैप का मकसद, कम्यूनिटी को Bazel 9.0 के लिए टीम के इरादों के बारे में जानकारी देना है. डेवलपर और ग्राहक से मिले सुझाव/राय/शिकायत या बाज़ार में उपलब्ध नए अवसरों के आधार पर, प्राथमिकताओं में बदलाव किया जा सकता है.