หากมีข้อสงสัยหรือต้องการความช่วยเหลือ โปรดดูหัวข้อ รับความช่วยเหลือ
Bazel คืออะไร
Bazel เป็นเครื่องมือที่ทำให้การสร้างและทดสอบซอฟต์แวร์เป็นแบบอัตโนมัติ งานบิลด์ที่รองรับ ได้แก่ การเรียกใช้คอมไพเลอร์และลิงเกอร์เพื่อสร้างโปรแกรมและไลบรารีที่ปฏิบัติการได้ รวมถึงการประกอบแพ็กเกจที่ทำให้ใช้งานได้สำหรับ Android, iOS และสภาพแวดล้อมเป้าหมายอื่นๆ Bazel มีลักษณะคล้ายกับเครื่องมืออื่นๆ เช่น Make, Ant, Gradle, Buck, Pants และ Maven
Bazel มีอะไรพิเศษ
Bazel ได้รับการออกแบบมาให้เหมาะกับวิธีพัฒนาซอฟต์แวร์ที่ Google โดยมีฟีเจอร์ดังนี้
- การรองรับหลายภาษา: Bazel รองรับ หลาย ภาษา และสามารถขยายเพื่อ รองรับภาษาโปรแกรมที่กำหนดเองได้
- ภาษาสร้างระดับสูง: โปรเจ็กต์อธิบายไว้ในภาษา
BUILDซึ่งเป็นรูปแบบข้อความที่กระชับซึ่งอธิบายโปรเจ็กต์เป็นชุดของไลบรารี ไบนารี และการทดสอบขนาดเล็กที่เชื่อมต่อกัน ในทางตรงกันข้าม เครื่องมืออย่าง Make กำหนดให้คุณต้องอธิบายไฟล์แต่ละไฟล์และการเรียกใช้คอมไพเลอร์ - การรองรับหลายแพลตฟอร์ม: คุณสามารถใช้เครื่องมือและไฟล์
BUILDเดียวกันเพื่อสร้างซอฟต์แวร์สำหรับสถาปัตยกรรมต่างๆ และแม้แต่แพลตฟอร์มต่างๆ ที่ Google เราใช้ Bazel เพื่อสร้างทุกอย่างตั้งแต่แอปพลิเคชันเซิร์ฟเวอร์ที่ทำงานบนระบบในศูนย์ข้อมูลไปจนถึงแอปของไคลเอ็นต์ที่ทำงานบนโทรศัพท์มือถือ - ความสามารถในการสร้างซ้ำ: ในไฟล์
BUILDไลบรารี การทดสอบ และไบนารีแต่ละรายการต้องระบุการขึ้นต่อกันโดยตรงอย่างครบถ้วน Bazel ใช้ข้อมูลการขึ้นต่อกันนี้เพื่อทราบว่าต้องสร้างใหม่เมื่อใดที่คุณทำการเปลี่ยนแปลงไฟล์ต้นฉบับ และงานใดที่สามารถทำงานแบบขนานได้ ซึ่งหมายความว่าการสร้างทั้งหมดจะเป็นแบบเพิ่มทีละส่วนและจะให้ผลลัพธ์เดียวกันเสมอ - รองรับการปรับขนาด: Bazel สามารถจัดการบิลด์ขนาดใหญ่ได้ ที่ Google ไบนารีเซิร์ฟเวอร์มักจะมีไฟล์ต้นฉบับ 100,000 ไฟล์ และบิลด์ที่ไม่มีการเปลี่ยนแปลงไฟล์จะใช้เวลาประมาณ 200 มิลลิวินาที
ทำไม Google ไม่ใช้...
- Make, Ninja: เครื่องมือเหล่านี้ให้การควบคุมที่แม่นยำมากเกี่ยวกับคำสั่งที่จะเรียกใช้เพื่อสร้างไฟล์ แต่ผู้ใช้ต้องเป็นผู้เขียนกฎที่ถูกต้อง
- ผู้ใช้โต้ตอบกับ Bazel ในระดับที่สูงขึ้น เช่น Bazel มีกฎในตัวสำหรับการทดสอบ Java, ไบนารี C++ และแนวคิดต่างๆ เช่น "แพลตฟอร์มเป้าหมาย" และ "แพลตฟอร์มโฮสต์" กฎเหล่านี้ได้รับการทดสอบอย่างเข้มงวดแล้วว่าใช้งานได้แน่นอน
- Ant และ Maven: Ant และ Maven มุ่งเน้นไปที่ Java เป็นหลัก ในขณะที่ Bazel จัดการได้หลายภาษา Bazel สนับสนุนให้แบ่งฐานของโค้ดออกเป็นหน่วยเล็กๆ ที่นำกลับมาใช้ซ้ำได้ และสามารถสร้างใหม่เฉพาะหน่วยที่ต้องสร้างใหม่เท่านั้น ซึ่งจะช่วยเร่งการพัฒนาเมื่อทำงานกับฐานของโค้ดขนาดใหญ่
- Gradle: ไฟล์การกำหนดค่าของ Bazel มีโครงสร้างที่ดีกว่าของ Gradle มาก ซึ่งช่วยให้ Bazel เข้าใจได้อย่างชัดเจนว่าการดำเนินการแต่ละอย่างทำอะไร ซึ่งช่วยให้เกิดการทำงานแบบขนานได้มากขึ้นและสร้างซ้ำได้ดียิ่งขึ้น
- Pants, Buck: เครื่องมือทั้ง 2 รายการนี้สร้างและพัฒนาโดยอดีตพนักงานของ Google ที่ Twitter และ Foursquare รวมถึง Facebook ตามลำดับ โดยมีต้นแบบมาจาก Bazel แต่ชุดฟีเจอร์แตกต่างกัน จึงไม่ใช่ทางเลือกที่เหมาะสมสำหรับเรา
Bazel มาจากไหน
Bazel เป็นเครื่องมือเวอร์ชันหนึ่งที่ Google ใช้สร้างซอฟต์แวร์เซิร์ฟเวอร์ภายใน และได้ขยายขอบเขตไปสร้างซอฟต์แวร์อื่นๆ ด้วย เช่น แอปบนอุปกรณ์เคลื่อนที่ (iOS, Android) ที่เชื่อมต่อกับเซิร์ฟเวอร์ของเรา
คุณได้เขียนเครื่องมือภายในใหม่เป็นโอเพนซอร์สไหม หรือเป็น Fork
Bazel แชร์โค้ดส่วนใหญ่กับเครื่องมือภายใน และกฎของเครื่องมือนี้ใช้สำหรับการสร้างนับล้านรายการทุกวัน
ทำไม Google ถึงสร้าง Bazel
เมื่อนานมาแล้ว Google สร้างซอฟต์แวร์โดยใช้ Makefiles ขนาดใหญ่ที่สร้างขึ้น ซึ่งทำให้การสร้างช้าและไม่น่าเชื่อถือ และเริ่มส่งผลกระทบต่อประสิทธิภาพการทำงานของนักพัฒนาซอฟต์แวร์และความคล่องตัวของบริษัท Bazel จึงเป็นวิธีแก้ปัญหาเหล่านี้
Bazel ต้องใช้คลัสเตอร์การสร้างไหม
Bazel เรียกใช้การดำเนินการบิลด์ในเครื่องโดยค่าเริ่มต้น อย่างไรก็ตาม Bazel ยังเชื่อมต่อกับคลัสเตอร์การสร้างเพื่อการสร้างและการทดสอบที่เร็วขึ้นได้ด้วย ดูรายละเอียดเพิ่มเติมได้ในเอกสารประกอบเกี่ยวกับ การดำเนินการและการแคชระยะไกล และ การแคช ระยะไกล
กระบวนการพัฒนาของ Google ทำงานอย่างไร
สำหรับฐานของโค้ดเซิร์ฟเวอร์ เราใช้ขั้นตอนการทำงานในการพัฒนาต่อไปนี้
- โค้ดเซิร์ฟเวอร์ทั้งหมดของเราอยู่ในระบบควบคุมเวอร์ชันเดียวขนาดใหญ่
- ทุกคนสร้างซอฟต์แวร์ด้วย Bazel
- ทีมต่างๆ เป็นเจ้าของส่วนต่างๆ ของแผนผังต้นฉบับ และทำให้คอมโพเนนต์ของตนพร้อมใช้งานเป็นเป้าหมาย
BUILD - การแยกสาขาใช้เพื่อจัดการการเผยแพร่เป็นหลัก ดังนั้นทุกคนจึงพัฒนาซอฟต์แวร์ที่การแก้ไขล่าสุด
Bazel เป็นรากฐานสำคัญของแนวคิดนี้ เนื่องจาก Bazel กำหนดให้ต้องระบุทรัพยากร Dependency ทั้งหมดอย่างครบถ้วน เราจึงคาดการณ์ได้ว่าโปรแกรมและการทดสอบใดบ้างที่จะได้รับผลกระทบจากการเปลี่ยนแปลง และตรวจสอบโปรแกรมและการทดสอบเหล่านั้นก่อนส่ง
ดูข้อมูลเบื้องหลังเพิ่มเติมเกี่ยวกับกระบวนการพัฒนาที่ Google ได้ในบล็อกเครื่องมือสำหรับนักพัฒนาซอฟต์แวร์
ทำไมคุณถึงเปิดตัว Bazel
การสร้างซอฟต์แวร์ควรเป็นเรื่องสนุกและง่าย การสร้างที่ช้าและคาดเดาไม่ได้ทำให้การเขียนโปรแกรมไม่สนุก
ทำไมฉันถึงควรใช้ Bazel
- Bazel อาจช่วยลดเวลาในการสร้างได้เนื่องจากสามารถคอมไพล์ไฟล์ใหม่เฉพาะไฟล์ที่ต้องคอมไพล์ใหม่เท่านั้น ในทำนองเดียวกัน เครื่องมือนี้สามารถข้ามการทดสอบซ้ำที่ทราบว่าไม่มีการเปลี่ยนแปลง
- Bazel ให้ผลลัพธ์ที่แน่นอน ซึ่งจะช่วยขจัดความคลาดเคลื่อนระหว่างการสร้างแบบเพิ่มทีละส่วนกับการสร้างใหม่ทั้งหมด, แล็ปท็อปกับระบบ CI และอื่นๆ
- Bazel สามารถสร้างแอปของไคลเอ็นต์และเซิร์ฟเวอร์ต่างๆ ด้วยเครื่องมือเดียวกันจากพื้นที่ทำงานเดียวกัน เช่น คุณสามารถเปลี่ยนโปรโตคอลของไคลเอ็นต์/เซิร์ฟเวอร์ในการคอมมิตครั้งเดียว และทดสอบว่าแอปบนอุปกรณ์เคลื่อนที่ที่อัปเดตแล้วทำงานร่วมกับเซิร์ฟเวอร์ที่อัปเดตแล้วได้หรือไม่ โดยสร้างทั้ง 2 อย่างด้วยเครื่องมือเดียวกัน ซึ่งจะได้รับประโยชน์ทั้งหมดที่กล่าวถึงข้างต้นจาก Bazel
ฉันดูตัวอย่างได้ไหม
ได้ ดูตัวอย่างง่ายๆ หรืออ่านซอร์สโค้ดของ Bazel เพื่อดูตัวอย่างที่ซับซ้อนมากขึ้น
Bazel เหมาะกับงานใดมากที่สุด
Bazel เหมาะกับการสร้างและทดสอบโปรเจ็กต์ที่มีคุณสมบัติดังนี้
- โปรเจ็กต์ที่มีฐานของโค้ดขนาดใหญ่
- โปรเจ็กต์ที่เขียนด้วยภาษาที่คอมไพล์แล้ว (หลายภาษา)
- โปรเจ็กต์ที่ทำให้ใช้งานได้ในหลายแพลตฟอร์ม
- โปรเจ็กต์ที่มีการทดสอบอย่างละเอียด
ฉันจะเรียกใช้ Bazel ได้ที่ไหน
Bazel ทำงานบน Linux, macOS (OS X) และ Windows
การพอร์ตไปยังแพลตฟอร์ม UNIX อื่นๆ ควรทำได้ง่ายพอสมควร ตราบใดที่แพลตฟอร์มมี JDK
ฉันไม่ควรใช้ Bazel กับงานใด
- Bazel พยายามแคชอย่างชาญฉลาด ซึ่งหมายความว่าเครื่องมือนี้ไม่เหมาะกับการเรียกใช้การดำเนินการบิลด์ที่มีเอาต์พุตที่ไม่ควรแคช ตัวอย่างเช่น ไม่ควรเรียกใช้ขั้นตอนต่อไปนี้จาก Bazel
- ขั้นตอนการคอมไพล์ที่ดึงข้อมูลจากอินเทอร์เน็ต
- ขั้นตอนการทดสอบที่เชื่อมต่อกับอินสแตนซ์ QA ของเว็บไซต์
- ขั้นตอนการทำให้ใช้งานได้ที่เปลี่ยนการกำหนดค่าระบบคลาวด์ของเว็บไซต์
- หากบิลด์ของคุณประกอบด้วยขั้นตอนที่ยาวและต่อเนื่องกัน 2-3 ขั้นตอน Bazel อาจช่วยได้ไม่มากนัก คุณจะได้รับความเร็วมากขึ้นโดยการแบ่งขั้นตอนที่ยาวออกเป็นเป้าหมายที่แยกกันและเล็กลง ซึ่ง Bazel สามารถเรียกใช้แบบขนานได้
ชุดฟีเจอร์ของ Bazel มีความเสถียรเพียงใด
ฟีเจอร์หลัก (กฎ C++, Java และ Shell) มีการใช้งานอย่างกว้างขวางภายใน Google จึงได้รับการทดสอบอย่างละเอียดและมีการเปลี่ยนแปลงน้อยมาก ในทำนองเดียวกัน เราทดสอบ Bazel เวอร์ชันใหม่กับเป้าหมายหลายแสนรายการทุกวันเพื่อค้นหาการถดถอย และเผยแพร่เวอร์ชันใหม่หลายครั้งทุกเดือน
กล่าวโดยสรุปคือ Bazel ควรทำงานได้ดี ยกเว้นฟีเจอร์ที่ทำเครื่องหมายว่าอยู่ในช่วงทดลอง การเปลี่ยนแปลงกฎที่ไม่ใช่ช่วงทดลองจะเข้ากันได้กับเวอร์ชันก่อนหน้า ดูรายการสถานะการรองรับฟีเจอร์โดยละเอียดเพิ่มเติมได้ในเอกสารประกอบการสนับสนุน
Bazel ในรูปแบบไบนารีมีความเสถียรเพียงใด
ภายใน Google เราตรวจสอบว่า Bazel ไม่ล่มบ่อย และโค้ดเบสโอเพนซอร์สของเราก็ควรเป็นเช่นเดียวกัน
ฉันจะเริ่มใช้ Bazel ได้อย่างไร
ดูหัวข้อ เริ่มต้นใช้งาน
Docker แก้ปัญหาความสามารถในการสร้างซ้ำได้ไม่ใช่หรือ
Docker ช่วยให้คุณสร้างแซนด์บ็อกซ์ที่มีระบบปฏิบัติการเวอร์ชันคงที่ได้ง่ายๆ เช่น Ubuntu 12.04, Fedora 21 ซึ่งจะแก้ปัญหาความสามารถในการสร้างซ้ำสำหรับสภาพแวดล้อมของระบบ นั่นคือ "ฉันต้องใช้ /usr/bin/c++ เวอร์ชันใด"
Docker ไม่ได้แก้ปัญหาความสามารถในการสร้างซ้ำที่เกี่ยวข้องกับการเปลี่ยนแปลงในโค้ดต้นฉบับ การเรียกใช้ Make ด้วย Makefile ที่เขียนไม่สมบูรณ์ภายในคอนเทนเนอร์ Docker อาจยังให้ผลลัพธ์ที่คาดเดาไม่ได้
ภายใน Google เราตรวจสอบเครื่องมือในการควบคุมแหล่งที่มาเพื่อความสามารถในการสร้างซ้ำ ด้วยวิธีนี้ เราจึงตรวจสอบการเปลี่ยนแปลงเครื่องมือ ("อัปเกรด GCC เป็น 4.6.1") ด้วยกลไกเดียวกับการเปลี่ยนแปลงไลบรารีพื้นฐาน ("แก้ไขการตรวจสอบขอบเขตใน OpenSSL")
ฉันสร้างไบนารีเพื่อทำให้ใช้งานได้ใน Docker ได้ไหม
Bazel ช่วยให้คุณสร้างไบนารีแบบสแตนด์อโลนที่ลิงก์แบบคงที่ใน C/C++ และไฟล์ Jar แบบรวมทุกอย่างไว้ในไฟล์เดียวสำหรับ Java ได้ ซึ่งจะทำงานโดยมีการขึ้นต่อกันน้อยมากในระบบ UNIX ปกติ และจึงควรติดตั้งภายในคอนเทนเนอร์ Docker ได้ง่าย
Bazel มีกฎสำหรับการจัดโครงสร้างโปรแกรมที่ซับซ้อนมากขึ้น เช่น โปรแกรม Java ที่ใช้ไฟล์ข้อมูลชุดหนึ่ง หรือเรียกใช้โปรแกรมอื่นเป็นกระบวนการย่อย คุณสามารถแพ็กเกจสภาพแวดล้อมดังกล่าวเป็นไฟล์เก็บถาวรแบบสแตนด์อโลน เพื่อให้ทำให้ใช้งานได้ในระบบต่างๆ รวมถึงอิมเมจ Docker
ฉันสร้างอิมเมจ Docker ด้วย Bazel ได้ไหม
ได้ คุณสามารถใช้กฎ Docker ของเรา เพื่อสร้าง อิมเมจ Docker ที่สร้างซ้ำได้
Bazel จะทำให้การสร้างของฉันสร้างซ้ำได้โดยอัตโนมัติไหม
สำหรับไบนารี Java และ C++ คำตอบคือใช่ โดยสมมติว่าคุณไม่เปลี่ยน Toolchain หากคุณมีขั้นตอนการสร้างที่เกี่ยวข้องกับสูตรที่กำหนดเอง (เช่น การเรียกใช้ไบนารีผ่านสคริปต์ของ Shell ภายในกฎ) คุณจะต้องระมัดระวังเป็นพิเศษดังนี้
- อย่าใช้การขึ้นต่อกันที่ไม่ได้ประกาศ การดำเนินการแบบแซนด์บ็อกซ์ (–spawn_strategy=sandboxed ใน Linux เท่านั้น) สามารถช่วยค้นหาการขึ้นต่อกันที่ไม่ได้ประกาศ
- หลีกเลี่ยงการจัดเก็บการประทับเวลาและรหัสผู้ใช้ในไฟล์ที่สร้างขึ้น ไฟล์ ZIP และไฟล์เก็บถาวรอื่นๆ มีแนวโน้มที่จะเกิดปัญหานี้เป็นพิเศษ
- หลีกเลี่ยงการเชื่อมต่อกับเครือข่าย การดำเนินการแบบแซนด์บ็อกซ์ก็ช่วยได้เช่นกัน
- หลีกเลี่ยงกระบวนการที่ใช้ตัวเลขสุ่ม โดยเฉพาะอย่างยิ่งการข้ามผ่านพจนานุกรมจะสุ่มในภาษาโปรแกรมหลายภาษา
คุณมีไบนารีเวอร์ชันที่เผยแพร่ไหม
มี คุณสามารถดูไบนารีเวอร์ชันล่าสุดที่เผยแพร่และอ่านนโยบายการเผยแพร่ของเราได้
ฉันใช้ Eclipse/IntelliJ/XCode Bazel ทำงานร่วมกับ IDE ได้อย่างไร
สำหรับ IntelliJ โปรดดูปลั๊กอิน IntelliJ with Bazel plugin
สำหรับ XCode โปรดดู Tulsi
สำหรับ Eclipse โปรดดู E4B ปลั๊กอิน
สำหรับ IDE อื่นๆ โปรดดู บล็อก โพสต์เกี่ยวกับวิธีการทำงานของปลั๊กอินเหล่านี้
ฉันใช้ Jenkins/CircleCI/TravisCI Bazel ทำงานร่วมกับระบบ CI ได้อย่างไร
Bazel จะแสดงรหัสออกที่ไม่ใช่ 0 หากการเรียกใช้การสร้างหรือการทดสอบล้มเหลว ซึ่งควรเพียงพอสำหรับการผสานรวม CI ขั้นพื้นฐาน เนื่องจาก Bazel ไม่จำเป็นต้องสร้างใหม่ทั้งหมดเพื่อให้ถูกต้อง ระบบ CI จึงไม่ควรได้รับการกำหนดค่าให้สร้างใหม่ทั้งหมดก่อนเริ่มการสร้าง/การทดสอบ
ดูรายละเอียดเพิ่มเติมเกี่ยวกับรหัสออกได้ใน คู่มือผู้ใช้
เราคาดหวังฟีเจอร์ใดได้บ้างในอนาคตจาก Bazel
ดูแผนงานของเรา
ฉันใช้ Bazel กับโปรเจ็กต์ INSERT LANGUAGE HERE ได้ไหม
Bazel สามารถขยายได้ ทุกคนสามารถเพิ่มการรองรับภาษาใหม่ได้ Bazel รองรับหลายภาษา โปรดดูรายการคำแนะนำในสารานุกรมบิลด์ และดูรายการที่ครอบคลุมมากขึ้นได้ที่ awesomebazel.com
หากต้องการพัฒนาส่วนขยายหรือดูวิธีการทำงาน โปรดดู เอกสารประกอบสำหรับการขยาย Bazel
ฉันร่วมสร้างฐานของโค้ด Bazel ได้ไหม
ดูหลักเกณฑ์การมีส่วนร่วมของเรา
ทำไมการพัฒนาทั้งหมดจึงไม่ทำแบบเปิด
เรายังต้องปรับโครงสร้างอินเทอร์เฟซระหว่างโค้ดสาธารณะใน Bazel กับส่วนขยายภายในของเราบ่อยๆ ซึ่งทำให้การพัฒนาแบบเปิดทำได้ยาก
คุณเปิดตัว Bazel เป็นโอเพนซอร์สเสร็จแล้วใช่ไหม
การเปิดตัว Bazel เป็นโอเพนซอร์สยังอยู่ระหว่างดำเนินการ โดยเฉพาะอย่างยิ่ง เรายังคงดำเนินการเปิดตัวสิ่งต่อไปนี้เป็นโอเพนซอร์ส
- การทดสอบหน่วยและการทดสอบการผสานรวมจำนวนมาก (ซึ่งจะช่วยให้การส่งแพตช์ง่ายขึ้น)
- การผสานรวม IDE แบบเต็ม
นอกเหนือจากโค้ดแล้ว เรายังต้องการให้การตรวจสอบโค้ด การติดตามข้อบกพร่อง และการตัดสินใจด้านการออกแบบทั้งหมดเกิดขึ้นแบบสาธารณะ โดยมีชุมชน Bazel เข้ามาเกี่ยวข้อง แต่เรายังไม่พร้อม ดังนั้นการเปลี่ยนแปลงบางอย่างจะปรากฏในที่เก็บข้อมูล Bazel โดยไม่มีคำอธิบายที่ชัดเจน แม้จะขาดความโปร่งใส แต่เราก็ต้องการสนับสนุนและร่วมมือกับนักพัฒนาซอฟต์แวร์ภายนอก ดังนั้นเราจึงเปิดตัวโค้ด แม้ว่าการพัฒนาบางส่วนจะยังคงเกิดขึ้นภายใน Google โปรดแจ้งให้เราทราบหากมีสิ่งใดที่ไม่ชัดเจนหรือไม่มีเหตุผลสมควรในขณะที่เราเปลี่ยนไปใช้โมเดลแบบเปิด
มีส่วนใดของ Bazel ที่จะไม่มีวันเปิดตัวเป็นโอเพนซอร์สไหม
ใช่ ฐานของโค้ดบางส่วนผสานรวมกับเทคโนโลยีเฉพาะของ Google หรือเรากำลังหาเหตุผลที่จะกำจัดออก (หรือเป็นทั้ง 2 อย่างรวมกัน) ฐานของโค้ดส่วนเหล่านี้ไม่พร้อมใช้งานใน GitHub และอาจจะไม่มีวันพร้อมใช้งาน
ฉันจะติดต่อทีมได้อย่างไร
คุณติดต่อเราได้ที่ bazel-discuss@googlegroups.com
ฉันจะรายงานข้อบกพร่องได้ที่ไหน
เปิดปัญหา ใน GitHub
คำว่า "Blaze" ในฐานของโค้ดคืออะไร
นี่เป็นชื่อภายในของเครื่องมือ โปรดเรียก Blaze ว่า Bazel
ทำไมโปรเจ็กต์อื่นๆ ของ Google (Android, Chrome) จึงใช้เครื่องมือสร้างอื่นๆ
จนกว่าจะมีการเผยแพร่ครั้งแรก (อัลฟ่า) Bazel ยังไม่พร้อมใช้งานภายนอก ดังนั้นโปรเจ็กต์โอเพนซอร์ส เช่น Chromium และ Android จึงใช้เครื่องมือนี้ไม่ได้ นอกจากนี้ การขาดการรองรับ Windows ในตอนแรกยังเป็นปัญหาในการสร้างแอปพลิเคชัน Windows เช่น Chrome เนื่องจากโปรเจ็กต์มีความสมบูรณ์และเสถียรมากขึ้น โปรเจ็กต์โอเพนซอร์สของAndroid จึงอยู่ระหว่างการย้ายข้อมูลไปยัง Bazel
ออกเสียง "Bazel" อย่างไร
ออกเสียงเหมือน "basil" (สมุนไพร) ในภาษาอังกฤษแบบอเมริกันว่า "BAY-zel" ซึ่งคล้องจองกับ "hazel" IPA: /ˈbeɪzˌəl/