หากมีข้อสงสัยหรือต้องการความช่วยเหลือ โปรดดูหัวข้อ รับความช่วยเหลือ
Bazel คืออะไร
Bazel เป็นเครื่องมือที่ทำให้การสร้างและทดสอบซอฟต์แวร์เป็นแบบอัตโนมัติ งานบิลด์ที่รองรับ ได้แก่ การเรียกใช้คอมไพเลอร์และลิงเกอร์เพื่อสร้างโปรแกรมและไลบรารีที่ปฏิบัติการได้ รวมถึงการประกอบแพ็กเกจที่ทำให้ใช้งานได้สำหรับ Android, iOS และสภาพแวดล้อมเป้าหมายอื่นๆ Bazel มีลักษณะคล้ายกับเครื่องมืออื่นๆ เช่น Make, Ant, Gradle, Buck, Pants และ Maven
Bazel มีอะไรพิเศษ
Bazel ได้รับการออกแบบมาให้เหมาะกับวิธีพัฒนาซอฟต์แวร์ที่ Google โดยมีฟีเจอร์ดังนี้
- การรองรับหลายภาษา: Bazel รองรับ หลายภาษา และสามารถขยายเพื่อรองรับภาษาโปรแกรมที่กำหนดเองได้
- ภาษาการสร้างระดับสูง: ระบบจะอธิบายโปรเจ็กต์ในภาษา
BUILDซึ่งเป็นรูปแบบข้อความที่กระชับซึ่งอธิบายโปรเจ็กต์เป็นชุดของไลบรารี ไบนารี และการทดสอบขนาดเล็กที่เชื่อมต่อกัน ในทางตรงกันข้าม เครื่องมืออย่าง Make กำหนดให้คุณต้องอธิบายไฟล์แต่ละไฟล์และการเรียกใช้คอมไพเลอร์ - การรองรับหลายแพลตฟอร์ม: คุณสามารถใช้เครื่องมือและไฟล์
BUILDเดียวกันเพื่อสร้างซอฟต์แวร์สำหรับสถาปัตยกรรมต่างๆ และแม้แต่แพลตฟอร์มต่างๆ ที่ Google เราใช้ Bazel เพื่อสร้างทุกอย่างตั้งแต่แอปพลิเคชันเซิร์ฟเวอร์ที่ทำงานบนระบบในศูนย์ข้อมูลไปจนถึงแอปของไคลเอ็นต์ที่ทำงานบนโทรศัพท์มือถือ - ความสามารถในการสร้างซ้ำ: ในไฟล์
BUILDไลบรารี การทดสอบ และไบนารีแต่ละรายการต้องระบุการขึ้นต่อกันโดยตรงอย่างครบถ้วน Bazel ใช้ข้อมูลทรัพยากร Dependency นี้เพื่อทราบว่าต้องสร้างใหม่เมื่อใดที่คุณทำการเปลี่ยนแปลงไฟล์ต้นฉบับ และงานใดที่สามารถทำงานแบบขนานได้ ซึ่งหมายความว่าการสร้างทั้งหมดจะเป็นแบบเพิ่มขึ้นและจะให้ผลลัพธ์เดียวกันเสมอ - ความสามารถในการปรับขนาด: 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 ได้ในบล็อก eng tools
เหตุใดคุณจึงเปิดตัว Bazel
การสร้างซอฟต์แวร์ควรเป็นเรื่องสนุกและง่าย การสร้างที่ช้าและคาดเดาไม่ได้ทำให้การเขียนโปรแกรมไม่สนุก
เหตุใดฉันจึงควรใช้ Bazel
- Bazel อาจช่วยลดเวลาในการสร้างได้ เนื่องจากสามารถคอมไพล์ไฟล์ที่ต้องคอมไพล์ใหม่เท่านั้น ในทำนองเดียวกัน Bazel สามารถข้ามการเรียกใช้การทดสอบซ้ำที่ทราบว่าไม่มีการเปลี่ยนแปลง
- Bazel ให้ผลลัพธ์ที่แน่นอน ซึ่งจะช่วยขจัดความคลาดเคลื่อนระหว่างการสร้างแบบเพิ่มขึ้นและการสร้างใหม่ทั้งหมด ระบบแล็ปท็อปและระบบ CI เป็นต้น
- Bazel สามารถสร้างแอปของไคลเอ็นต์และเซิร์ฟเวอร์ต่างๆ ด้วยเครื่องมือเดียวกันจากพื้นที่ทำงานเดียวกัน ตัวอย่างเช่น คุณสามารถเปลี่ยนโปรโตคอลไคลเอ็นต์/เซิร์ฟเวอร์ในการคอมมิตครั้งเดียว และทดสอบว่าแอปบนอุปกรณ์เคลื่อนที่ที่อัปเดตแล้วทำงานร่วมกับเซิร์ฟเวอร์ที่อัปเดตแล้วได้ โดยสร้างทั้ง 2 อย่างด้วยเครื่องมือเดียวกัน และได้รับประโยชน์ทั้งหมดที่กล่าวถึงข้างต้นของ Bazel
ฉันดูตัวอย่างได้ไหม
ได้ ดูตัวอย่างง่ายๆ หรืออ่านซอร์สโค้ดของ Bazel เพื่อดูตัวอย่างที่ซับซ้อนมากขึ้น
Bazel เหมาะกับงานใดมากที่สุด
Bazel เหมาะอย่างยิ่งสำหรับการสร้างและทดสอบโปรเจ็กต์ที่มีคุณสมบัติดังต่อไปนี้
- โปรเจ็กต์ที่มีฐานของโค้ดขนาดใหญ่
- โปรเจ็กต์ที่เขียนด้วยภาษาที่คอมไพล์แล้ว (หลายภาษา)
- โปรเจ็กต์ที่ทำให้ใช้งานได้ในหลายแพลตฟอร์ม
- โปรเจ็กต์ที่มีการทดสอบอย่างละเอียด
ฉันจะเรียกใช้ Bazel ได้ที่ใด
Bazel ทำงานบน Linux, macOS (OS X) และ Windows
การพอร์ตไปยังแพลตฟอร์ม UNIX อื่นๆ ควรทำได้ง่ายพอสมควร ตราบใดที่แพลตฟอร์มมี JDK
ฉันไม่ควรใช้ Bazel กับงานใด
- 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
สำหรับ 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" ในฐานของโค้ดหมายถึงอะไร
นี่เป็นชื่อภายในของเครื่องมือ โปรดเรียกเครื่องมือนี้ว่า Bazel
เหตุใดโปรเจ็กต์อื่นๆ ของ Google (Android, Chrome) จึงใช้เครื่องมือสร้างอื่นๆ
จนกว่าจะมีการเผยแพร่ครั้งแรก (อัลฟ่า) Bazel ยังไม่พร้อมใช้งานภายนอก ดังนั้นโปรเจ็กต์โอเพนซอร์ส เช่น Chromium และ Android จึงใช้ Bazel ไม่ได้ นอกจากนี้ การไม่รองรับ Windows ในตอนแรกยังเป็นปัญหาสำหรับการสร้างแอปพลิเคชัน Windows เช่น Chrome เนื่องจากโครงการมีความสมบูรณ์และเสถียรมากขึ้น โครงการโอเพนซอร์ส Android จึงอยู่ระหว่างการย้ายข้อมูลไปยัง Bazel
คำว่า "Bazel" ออกเสียงอย่างไร
ออกเสียงเหมือนคำว่า "basil" (สมุนไพร) ในภาษาอังกฤษแบบสหรัฐอเมริกาว่า "BAY-zel" ซึ่งคล้องจองกับคำว่า "hazel" IPA: /ˈbeɪzˌəl/