Bazel का रोडमैप

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

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

Bzlmod पर पूरी तरह से माइग्रेट करना

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

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

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

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के प्रोजेक्ट की नीति पर आधारित है. संभव है कि यह सुविधा 9.0 में ऐक्सपेरिमेंटल बनी रहे. हालांकि, इस बारे में सुझाव, राय या शिकायत का स्वागत है.

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

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

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

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


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

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