अक्सर पूछे जाने वाले सवाल

किसी समस्या की शिकायत करें स्रोत देखें

अगर आपको कुछ पूछना है या किसी तरह की मदद चाहिए, तो सहायता पाना लेख पढ़ें.

Bazel क्या है?

Bazel एक ऐसा टूल है जो सॉफ़्टवेयर बनाने और उसकी जांच करने में मदद करता है. बिल्ड टास्क का इस्तेमाल, एक्ज़ीक्यूटेबल प्रोग्राम और लाइब्रेरी बनाने के लिए, कंपाइल करने और लिंकर चलाने के साथ-साथ Android, iOS, और अन्य टारगेट एनवायरमेंट के लिए, डिप्लॉय किए जा सकने वाले पैकेज बनाने में किया जाता है. Bazel, इससे मिलते-जुलते दूसरे टूल की तरह है. जैसे, Make, Ant, Gradle, Buck, Pants, और Maven.

Bazel की खास बातें?

Bazel को Google में सॉफ़्टवेयर डेवलप करने के तरीके के हिसाब से डिज़ाइन किया गया था. इसमें ये सुविधाएं शामिल हैं:

  • कई भाषाओं में सहायता: Bazel का इस्तेमाल कई भाषाओं के लिए किया जा सकता है. साथ ही, इसे आर्बिट्रेरी प्रोग्रामिंग भाषाओं के लिए भी इस्तेमाल किया जा सकता है.
  • बिल्ड-लेवल बिल्ड लैंग्वेज: प्रोजेक्ट की जानकारी, BUILD भाषा में दी जाती है. यह एक छोटा टेक्स्ट फ़ॉर्मैट होता है, जिसमें प्रोजेक्ट को एक-दूसरे से जुड़ी छोटी लाइब्रेरी, बाइनरी, और टेस्ट के तौर पर सेट किया जाता है. इसके उलट, निर्माता जैसे टूल की मदद से आपको अलग-अलग फ़ाइलों और कंपाइलर शुरू करने के तरीकों के बारे में जानकारी देनी होगी.
  • मल्टी-प्लैटफ़ॉर्म सहायता: अलग-अलग आर्किटेक्चर और यहां तक कि अलग-अलग प्लैटफ़ॉर्म के लिए सॉफ़्टवेयर बनाने के लिए, एक ही टूल और BUILD फ़ाइलों का इस्तेमाल किया जा सकता है. Google में, हम डेटा सर्वर में सिस्टम पर चलने वाले सर्वर ऐप्लिकेशन से लेकर मोबाइल फ़ोन पर चलने वाले क्लाइंट ऐप्लिकेशन तक, सब कुछ बनाने के लिए Bazel का इस्तेमाल करते हैं.
  • फिर से जनरेट करना: BUILD फ़ाइलों में, हर लाइब्रेरी, टेस्ट और बाइनरी को सीधे तौर पर अपनी डिपेंडेंसी पूरी तरह से बताना चाहिए. Bazel इस डिपेंडेंसी जानकारी का इस्तेमाल करता है, ताकि यह पता लगाया जा सके कि किसी सोर्स फ़ाइल में बदलाव करने पर किन चीज़ों को फिर से बनाया जाना चाहिए. साथ ही, यह भी पता चलता है कि कौनसे टास्क साथ-साथ चल सकते हैं. इसका मतलब है कि सभी बिल्ड इंक्रीमेंटल होते हैं और हमेशा एक जैसे नतीजे देते हैं.
  • बढ़ाने लायक: Bazel बड़े बिल्ड संभाल सकता है; Google में, सर्वर बाइनरी के लिए 100k स्रोत फ़ाइलें होना आम बात है और ऐसे बिल्ड जहां करीब कोई फ़ाइल नहीं बदली गई थी करीब ~200 मि.से.

Google इसका इस्तेमाल क्यों नहीं करता...?

  • बनाएं: निंजा, ये टूल फ़ाइलों को बनाने के लिए इस्तेमाल किए जाने वाले कमांड पर इस बात का बिलकुल सटीक नियंत्रण देते हैं, लेकिन सही नियम लिखने की ज़िम्मेदारी उपयोगकर्ता की होती है.
    • उपयोगकर्ता, ऊंचे लेवल पर Bazel से इंटरैक्ट करते हैं. उदाहरण के लिए, Bazel में “Java टेस्ट”, “C++ बाइनरी”, और “टारगेट प्लैटफ़ॉर्म” और “होस्ट प्लैटफ़ॉर्म” जैसे विचार पहले से मौजूद होते हैं. इन नियमों को टेस्ट करके, इन्हें बेवकूफ़ी से बचाया गया है.
  • चींटी और Maven: चींटी और Maven मुख्य रूप से Java के लिए काम करते हैं, जबकि Bazel कई भाषाओं को हैंडल करते हैं. बेज़ल कोडबेस को छोटी-छोटी री-यूज़ेबल यूनिट में बांटने के लिए प्रोत्साहित करता है. साथ ही, सिर्फ़ वे डेटाबेस तैयार कर सकते हैं जिन्हें फिर से बनाने की ज़रूरत हो. यह बड़े कोडबेस के साथ काम करते समय डेवलपमेंट को तेज़ करता है.
  • Gradle: Bazel कॉन्फ़िगरेशन फ़ाइलों को Gradle की तुलना में कहीं ज़्यादा संरचित किया जाता है, जिससे Bazel को यह समझने में सहायता मिलती है कि प्रत्येक कार्रवाई सटीक रूप से क्या करती है. इसकी मदद से, साथ-साथ देखने की क्षमता बढ़ती है और डेटा को बेहतर तरीके से फिर से देखा जा सकता है.
  • पैंट, बक: ये टूल पूर्व-Googlers और Twitter और Foursquare और Facebook पर दोनों ने बनाए और डेवलप किए. वे मॉडल बेज़ल के बाद बनाए गए हैं, लेकिन उनके फ़ीचर सेट अलग-अलग हैं, इसलिए वे हमारे लिए बेहतर विकल्प नहीं हैं.

बेज़ल कहां से आया था?

Bazel टूल का एक ऐसा प्रकार है जिसका उपयोग Google आंतरिक रूप से अपना सर्वर सॉफ़्टवेयर बनाने के लिए करता है. इसने हमारे सर्वर से कनेक्ट होने वाले मोबाइल ऐप्लिकेशन जैसे अन्य सॉफ़्टवेयर (iOS, Android) बनाने के लिए भी विस्तार किया है.

क्या आपने अपने इंटरनल टूल को ओपन सोर्स के तौर पर फिर से लिखा है? क्या यह फ़ोर्क है?

Bazel अपने ज़्यादातर कोड को अंदरूनी टूल के साथ शेयर करता है. साथ ही, उसके नियमों का इस्तेमाल हर दिन लाखों बिल्ड के लिए किया जाता है.

Google ने Bazel क्यों बनाया?

बहुत समय पहले, Google ने बड़े पैमाने पर, जनरेट की गई Makefile का इस्तेमाल करके अपना सॉफ़्टवेयर बनाया था. इस वजह से बिल्ड समय धीरे-धीरे और पूरी तरह से तैयार नहीं हुआ. इस वजह से, हमारी डेवलपर प्रोडक्टिविटी और कंपनी की फ़ुर्ती को बढ़ाने में रुकावट आने लगी. Bazel इन समस्याओं को हल करने का एक तरीका था.

क्या Bazel को बिल्ड क्लस्टर की ज़रूरत है?

Bazel, बिल्ड की कार्रवाई डिफ़ॉल्ट रूप से स्थानीय तौर पर करता है. हालांकि, बेज़ल तेज़ी से बिल्ड और जांच करने के लिए किसी बिल्ड क्लस्टर से भी कनेक्ट कर सकता है. ज़्यादा जानकारी के लिए, रिमोट एक्ज़ीक्यूशन और कैश मेमोरी और रिमोट कैश मेमोरी से जुड़े हमारे दस्तावेज़ देखें.

Google डेवलपमेंट प्रोसेस कैसे काम करती है?

हम अपने सर्वर कोड बेस के लिए, डेवलपमेंट डेवलपमेंट के इन वर्कफ़्लो का इस्तेमाल करते हैं:

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

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

Google में डेवलपमेंट की प्रक्रिया के बारे में ज़्यादा जानने के लिए, इंजीनियरिंग टूल ब्लॉग देखें.

आपने Bazel क्यों खोला?

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

मुझे Bazel का इस्तेमाल क्यों करना चाहिए?

  • Bazel आपको ज़्यादा तेज़ी से बिल्ड बनाने में मदद कर सकता है, क्योंकि यह सिर्फ़ उन फ़ाइलों को कंपाइल कर सकता है जिन्हें फिर से कंपाइल करना पड़ता है. इसी तरह, यह 'फिर से चल रहा है' जांच छोड़ सकता है, जिसके बारे में उसे पता नहीं है.
  • Bazel के नतीजे, सार्वजनिक नहीं होते. यह इंक्रीमेंटल और क्लीन बिल्ड, लैपटॉप और सीआई सिस्टम वगैरह के बीच का अंतर हटा देता है.
  • Bazel एक ही टूल की मदद से, एक ही टूल का इस्तेमाल करके अलग-अलग क्लाइंट और सर्वर ऐप्लिकेशन बना सकता है. उदाहरण के लिए, आप सिर्फ़ एक प्रतिबद्धता में क्लाइंट/सर्वर प्रोटोकॉल बदल सकते हैं और परीक्षण कर सकते हैं कि अपडेट किया गया मोबाइल ऐप्लिकेशन अपडेट किए गए सर्वर के साथ काम करता है, जिससे दोनों को एक ही टूल का इस्तेमाल करके Bazel के ऊपर बताए गए सभी फ़ायदे मिलते हैं.

क्या मुझे उदाहरण दिख सकते हैं?

हां; एक ज़्यादा आसान उदाहरण के लिए एक आसान उदाहरण देखें या बेज़ल स्रोत कोड पढ़ें.

बज़ेल के बारे में क्या जानकारी है?

Bazel इन प्रॉपर्टी की मदद से, प्रोजेक्ट बनाने और उनकी जांच करने में माहिर है:

  • बड़े कोडबेस वाले प्रोजेक्ट
  • (कई) कंपाइल की गई भाषाओं में लिखे गए प्रोजेक्ट
  • प्रोजेक्ट जो कई प्लैटफ़ॉर्म पर डिप्लॉय होते हैं
  • ऐसे प्रोजेक्ट जिन पर बहुत काम किया जा रहा है

मैं Bazel कहां चला सकता/सकती हूं?

Bazel, Linux, macOS (OS X) और Windows पर चलता है.

शर्त के मुताबिक, JUKK की सुविधा उपलब्ध होने पर ही, UNIX के प्लैटफ़ॉर्म को पोर्ट किया जा सकता है.

मुझे Bazel का इस्तेमाल क्यों नहीं करना चाहिए?

  • बेज़ल कैशिंग के बारे में समझदारी से काम करने की कोशिश करती है. इसका मतलब है कि ऐसे बिल्ड ऑपरेशन चलाने के लिए सही नहीं है जिनके आउटपुट कैश नहीं किए जाने चाहिए. उदाहरण के लिए, Bazel से नीचे दिया गया तरीका नहीं चलाना चाहिए:
    • इंटरनेट से डेटा फ़ेच करने वाला कंपाइलेशन चरण.
    • एक टेस्ट चरण, जो आपकी साइट के QA इंस्टेंस से कनेक्ट होता है.
    • ऐसा डिप्लॉयमेंट चरण जो आपकी साइट के क्लाउड कॉन्फ़िगरेशन में बदलाव करता है.
  • अगर आपके बिल्ड में कुछ लंबे, क्रमिक चरण हैं, तो हो सकता है कि Bazel ज़्यादा मदद न कर पाए. लंबे लक्ष्यों को छोटे हिस्सों में बांटने से, जो लक्ष्य एक साथ चल सकते हैं, आपको उनसे ज़्यादा गति मिलेगी.

Bazel की सुविधा कितनी सुरक्षित है?

Google की मुख्य सुविधाओं (C++, Java और शेल से जुड़े नियमों) का बड़े पैमाने पर इस्तेमाल किया जाता है. इसलिए, इनकी अच्छी तरह से जांच की जाती है और इनका इस्तेमाल बंद कर दिया जाता है. इसी तरह, हम रिग्रेशन का पता लगाने के लिए, हर दिन लाखों टारगेट में से बेज़ल के नए वर्शन की जांच करते हैं. साथ ही, हम हर महीने कई बार नए वर्शन भी रिलीज़ करते हैं.

कम शब्दों में कहें, तो प्रयोग के तौर पर मार्क की गई सुविधाओं को छोड़कर, Bazel को सिर्फ़ काम करना चाहिए. परफ़ॉर्मेंस की जांच से जुड़े नियमों में किए गए बदलाव पुराने सिस्टम के साथ काम करेंगे. सुविधा की सहायता स्थिति के बारे में ज़्यादा जानकारी के लिए, हमारे सहायता दस्तावेज़ पर जाएं.

बैज़ल बाइनरी के रूप में कितना स्थिर है?

Google में, हम यह पक्का करते हैं कि Bazel क्रैश बहुत कम हो. यह हमारे ओपन सोर्स कोडबेस के लिए भी होना चाहिए.

मैं Bazel का इस्तेमाल कैसे शुरू करूं?

शुरू करना देखें.

क्या डॉकर फिर से जनरेट करने की समस्याओं को हल नहीं करता?

डॉकर की मदद से, ओएस के तय रिलीज़ के साथ आसानी से सैंडबॉक्स बनाए जा सकते हैं. उदाहरण के लिए, Ubuntu 12.04, Fedora 21. यह सिस्टम के माहौल को फिर से जनरेट करने की समस्या को हल करता है – जो कि, “मुझे /usr/bin/c++ के किस वर्शन की ज़रूरत है?”

डॉकर, सोर्स कोड में किए गए बदलावों को ध्यान में रखकर काम नहीं करता. किसी इनकमिंग कंटेनर के अंदर, गलत तरीके से लिखे गए Makefile की मदद से रनिंग चलाने से बेहतर नतीजे मिलते हैं.

Google में, हम फिर से इस्तेमाल करने के लिए सोर्स कंट्रोल के टूल की जांच करते हैं. इस तरह हम टूल में बदलाव करने (“GCC को 4.6.1 में अपग्रेड करने”) के लिए, उसी तरीके का इस्तेमाल कर सकते हैं जिस तरह बेस लाइब्रेरी में बदलाव किए जाते हैं (“बाउंड फ़ील्ड में सीमाओं की जांच करना”).

क्या मैं डॉकर पर डिप्लॉयमेंट के लिए बाइनरी बना सकता/सकती हूं?

Bazel की मदद से, C/C++ में स्टैंडअलोन, स्टैटिक तौर से लिंक की गई बाइनरी, और Java के लिए खुद से बनी जार फ़ाइलें बनाई जा सकती हैं. ये सामान्य UNIX सिस्टम पर कुछ निर्भरताओं के साथ चलते हैं. इसलिए, इन्हें किसी डॉकर कंटेनर में इंस्टॉल करना आसान होना चाहिए.

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

क्या मैं बेज़ल की मदद से डॉकर इमेज बना सकता/सकती हूं?

हां, फिर से जनरेट करने लायक डॉकर इमेज बनाने के लिए, आप हमारे Docker नियमों का इस्तेमाल कर सकते हैं.

क्या Bazel अपने बिल्ड को अपने-आप फिर से जनरेट करने लायक बना देगा?

Java और C++ बाइनरी के लिए, यह मानते हुए कि आपने टूल चेन को नहीं बदला है. अगर आपके पास ऐसे तरीके हैं जिनमें पसंद के मुताबिक रेसिपी शामिल होती हैं (उदाहरण के लिए, किसी नियम में शेल स्क्रिप्ट से बाइनरी लागू करना), तो आपको कुछ और सावधानी बरतनी होगी:

  • उन डिपेंडेंसी का इस्तेमाल न करें जिनका एलान नहीं किया गया था. सैंडबॉक्स किए गए एक्ज़ीक्यूशन (–spawn_stratepy=sandboxed, only Linux पर) से, डिपेंडेंसी के बारे में जानकारी मिल सकती है.
  • टाइमस्टैंप और User-ID को जनरेट की गई फ़ाइलों में सेव न करें. ZIP फ़ाइलों और अन्य संग्रहों में इस बात की ज़्यादा संभावना होती है.
  • नेटवर्क से कनेक्ट करने से बचें. सैंडबॉक्स किए गए प्रोग्राम से भी मदद मिल सकती है.
  • ऐसे प्रोसेस से बचें जिनमें रैंडम नंबर इस्तेमाल होते हैं. खास तौर पर, कई प्रोग्रामिंग भाषाओं में, शब्दकोश के ट्रेवर्सल में किसी भी क्रम में बदलाव किए जा सकते हैं.

क्या आपके पास बाइनरी रिलीज़ हैं?

हां, आप सबसे नई रिलीज़ बाइनरी देख सकते हैं और हमारी रिलीज़ नीति को पढ़ सकते हैं

मैं Eclipse/IntelliJ/XCode का उपयोग करता/करती हूं. Bazel, IDE के साथ कैसे इंटरऑपरेट करता है?

IntelliJ के लिए, Bezel प्लग इन के साथ IntelliJ देखें.

XCode के लिए, Tulsi देखें.

Eclipse के लिए, E4B प्लग इन देखें.

अन्य आईडीई के लिए, ब्लॉग पोस्ट देखें और जानें कि ये प्लग इन कैसे काम करते हैं.

मैं Jenkins/ScopeCI/TravisCI का इस्तेमाल करता/करती हूं. Bazel, सीआई सिस्टम के साथ कैसे इंटरऑपरेट करता है?

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

एग्ज़िट कोड के बारे में ज़्यादा जानकारी यूज़र मैन्युअल में दी गई है.

Bazel में, आने वाले समय में किन सुविधाओं का इस्तेमाल किया जा सकता है?

हमारे रोडमैप देखें.

क्या मैं अपने INSERT Language HERE प्रोजेक्ट में Bazel का इस्तेमाल कर सकता/सकती हूं?

बेज़ल एक्सटेंसिबल है. कोई भी व्यक्ति नई भाषाओं की सुविधा जोड़ सकता है. कई भाषाएं काम करती हैं: सुझावों की सूची के लिए एन्साइक्लोपीडिया बनाएं और ज़्यादा जानकारी के लिए awesomebazel.com देखें.

अगर आपको एक्सटेंशन डेवलप करना है या उनके काम करने का तरीका जानना है, तो Bzelt को बड़ा करने से जुड़ा दस्तावेज़ देखें.

क्या मैं Bazel कोड के बेस में योगदान दे सकता/सकती हूं?

हमारे योगदान से जुड़े दिशा-निर्देश देखें.

यह पूरी तरह से डेवलप क्यों नहीं हो गया?

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

क्या आपने बेज़ल ओपन सोर्सिंग किया है?

ओपन सोर्सिंग बेज़ल में काम चल रहा है. खास तौर पर, हम अब भी ओपन सोर्सिंग पर काम कर रहे हैं:

  • हमारी कई यूनिट और इंटिग्रेशन टेस्ट (जिनकी मदद से पैच का आसानी से इस्तेमाल किया जा सकता है).
  • पूरा आईडीई इंटिग्रेशन.

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

क्या बज़ेल के कुछ ऐसे हिस्से हैं जो कभी भी ओपन सोर्स नहीं होंगे?

हां, कुछ कोड बेस या तो Google की खास टेक्नोलॉजी के साथ इंटिग्रेट होते हैं या फिर हम उससे छुटकारा पाने की कोई वजह खोज रहे हैं (या दोनों का मिला-जुला रूप है). कोड बेस के ये हिस्से GitHub पर उपलब्ध नहीं हैं और शायद कभी नहीं होंगे.

मैं टीम से कैसे संपर्क करूं?

हम bazel-consent@googlegroups.com पर संपर्क कर सकते हैं.

मैं बग की रिपोर्ट कहां करूं?

GitHub पर कोई समस्या खोलें.

कोडबेस में “ब्लेज़” शब्द क्या है?

यह टूल के लिए अंदरूनी नाम है. कृपया ब्लेज़ को बेज़ल के नाम से पेश करें.

अन्य Google प्रोजेक्ट (Android, Chrome) अन्य बिल्ड टूल का इस्तेमाल क्यों करते हैं?

पहली बार (ऐल्फ़ा) रिलीज़ तक, Bazel बाहरी तौर पर उपलब्ध नहीं था, इसलिए Chromium और Android जैसे ओपन सोर्स प्रोजेक्ट इसका इस्तेमाल नहीं कर सके. इसके साथ ही, Windows ऐप्लिकेशन बनाने के लिए Windows की सहायता की मूल कमी थी, जैसे कि Chrome. प्रोजेक्ट के ठीक से विकसित होने के बाद, Android ओपन सोर्स प्रोजेक्ट बेज़ल पर माइग्रेट हो रहा है.

“बेज़ल” का उच्चारण क्या है?

अमेरिकी अंग्रेज़ी में “बेसिल” (हर्बल) की तरह ही: “BAY-zel”. यह “hazel” के साथ राइम करता है. IPA: /beɪz挞l/