คำถามที่พบบ่อย

รายงานปัญหา ดูแหล่งที่มา

หากคุณมีคำถามหรือต้องการการสนับสนุน โปรดดูที่การรับความช่วยเหลือ

Bazel คืออะไร

Bazel คือเครื่องมือที่ทำให้การสร้างและทดสอบซอฟต์แวร์เป็นแบบอัตโนมัติ งานบิลด์ที่รองรับรวมถึงการเรียกใช้คอมไพเลอร์และ Linker เพื่อสร้างโปรแกรมและไลบรารีปฏิบัติการ ตลอดจนการประกอบแพ็กเกจที่ทำให้ใช้งานได้สำหรับ Android, iOS และสภาพแวดล้อมเป้าหมายอื่นๆ Bazel คล้ายกับเครื่องมืออื่นๆ เช่น Make, Ant, Gradle, Buck, Pants และ Maven

ความพิเศษของ Bazel คืออะไร

Bazel ได้รับการออกแบบมาให้สอดคล้องกับแนวทางการพัฒนาซอฟต์แวร์ที่ Google ซึ่งมีฟีเจอร์ดังต่อไปนี้

  • การรองรับหลายภาษา: Bazel รองรับหลายภาษา และสามารถขยายให้รองรับภาษาโปรแกรมที่กำหนดเอง
  • ภาษาบิลด์ระดับสูง: มีการอธิบายโปรเจ็กต์ในภาษา BUILD ซึ่งเป็นรูปแบบข้อความสั้นๆ ที่อธิบายโปรเจ็กต์เป็นชุดไลบรารี ไบนารี และการทดสอบขนาดเล็กที่เชื่อมต่อถึงกัน ในทางตรงกันข้าม ในเครื่องมืออย่าง Make คุณจะต้องอธิบายแต่ละไฟล์และคำขอของคอมไพเลอร์
  • การรองรับหลายแพลตฟอร์ม: เครื่องมือเดียวกันและไฟล์ BUILD เดียวกันใช้สร้างซอฟต์แวร์สำหรับสถาปัตยกรรมต่างๆ หรือแม้แต่แพลตฟอร์มต่างๆ ได้ Google ใช้ Bazel ในการสร้างทุกสิ่งตั้งแต่แอปพลิเคชันเซิร์ฟเวอร์ที่ทำงานบนระบบในศูนย์ข้อมูลของเราไปจนถึงแอปไคลเอ็นต์ที่ทำงานบนโทรศัพท์มือถือ
  • ความสามารถในการทำซ้ำ: ในไฟล์ BUILD ไลบรารี การทดสอบ และไบนารีแต่ละรายการต้องระบุทรัพยากร Dependency โดยตรงทั้งหมด Bazel ใช้ข้อมูลทรัพยากร Dependency นี้เพื่อให้ทราบว่าต้องสร้างอะไรใหม่เมื่อแก้ไขไฟล์ต้นฉบับ และงานใดทํางานพร้อมกันได้ ซึ่งหมายความว่าบิลด์ทั้งหมดเป็นบิลด์ส่วนเพิ่มและให้ผลลัพธ์เดียวกันเสมอ
  • รองรับการปรับขนาด: Bazel สามารถจัดการงานสร้างขนาดใหญ่ ที่ Google เป็นเรื่องปกติที่ไบนารีของเซิร์ฟเวอร์จะมีไฟล์ต้นฉบับ 100,000 ไฟล์ และบิลด์ที่ไม่มีการเปลี่ยนแปลงไฟล์จะใช้เวลาประมาณ 200 มิลลิวินาที

เหตุใด Google จึงไม่ใช้...

  • ผู้ผลิต: เครื่องมือเหล่านี้ให้การควบคุมที่แน่ชัดว่าคำสั่งใดจะถูกเรียกใช้เพื่อสร้างไฟล์ แต่ผู้ใช้จะต้องเขียนกฎที่ถูกต้องเอง
    • ผู้ใช้โต้ตอบกับ Bazel ในระดับที่สูงกว่า ตัวอย่างเช่น Bazel มีกฎในตัวสำหรับ "การทดสอบ Java" "ไบนารี C++" และส่วนโยง เช่น "แพลตฟอร์มเป้าหมาย" และ "แพลตฟอร์มโฮสต์" กฎเหล่านี้ผ่านการทดสอบการต่อสู้เพื่อการป้องกันที่ชัดเจน
  • Ant และ Maven: Ant และ Maven จะมุ่งเน้นไปที่ Java เป็นหลัก ขณะที่ Bazel รองรับการใช้งานหลายภาษา Bazel ส่งเสริมให้แบ่งฐานของโค้ดย่อยในหน่วยที่นำมาใช้ใหม่ได้ซึ่งมีขนาดเล็ก และสร้างใหม่ได้เฉพาะส่วนที่จำเป็นต้องสร้างใหม่ ซึ่งจะช่วยเร่งความเร็วในการพัฒนาเมื่อทำงานร่วมกับฐานของโค้ดขนาดใหญ่
  • Gradle: ไฟล์การกำหนดค่า Bazel มีโครงสร้างมากกว่าของ Gradle มาก ทำให้ Bazel เข้าใจว่าแต่ละการดำเนินการทำอะไรบ้าง ซึ่งจะช่วยให้ทำงานพร้อมกันมากขึ้นและทำซ้ำได้ดีขึ้น
  • Pants, Buck: เครื่องมือทั้งสองถูกสร้างและพัฒนาโดยอดีตชาว Googler ที่ Twitter และ Foursquare และ Facebook ตามลำดับ โดยโมเดลเหล่านี้สร้างขึ้นตาม Bazel แต่ชุดฟีเจอร์จะแตกต่างออกไป จึงไม่ใช่ทางเลือกที่ใช้ได้จริงสำหรับเรา

Bazel มาจากไหน

Bazel เป็นเครื่องมือรสชาติที่ Google ใช้สร้างซอฟต์แวร์เซิร์ฟเวอร์ไว้ภายใน และได้ขยายไปสู่การสร้างซอฟต์แวร์อื่นๆ ด้วย เช่น แอปบนอุปกรณ์เคลื่อนที่ (iOS, Android) ที่เชื่อมต่อกับเซิร์ฟเวอร์ของเรา

คุณเขียนเครื่องมือภายในใหม่ให้เป็นโอเพนซอร์สใช่ไหม ใช่ส้อมไหม

Bazel แชร์โค้ดส่วนใหญ่กับเครื่องมือภายในและมีการใช้กฎกับบิลด์หลายล้านรายการทุกวัน

ทำไม Google จึงสร้าง Bazel

นานมาแล้ว Google ได้สร้างซอฟต์แวร์โดยใช้ Makefile ขนาดใหญ่และสร้างขึ้น สิ่งเหล่านี้ทำให้การสร้างงานช้าและไม่น่าเชื่อถือ ซึ่งเป็นการเข้ามาแทรกแซงประสิทธิภาพการทำงานของนักพัฒนาซอฟต์แวร์และความคล่องตัวของบริษัท Bazel คือวิธีแก้ปัญหาเหล่านี้

Bazel ต้องการคลัสเตอร์บิลด์ไหม

Bazel เรียกใช้การดำเนินการบิลด์ภายในเครื่องโดยค่าเริ่มต้น อย่างไรก็ตาม Bazel ยังเชื่อมต่อกับคลัสเตอร์บิลด์เพื่อบิลด์และทดสอบได้รวดเร็วยิ่งขึ้น ดูรายละเอียดเพิ่มเติมในเอกสารประกอบเกี่ยวกับการดำเนินการและการแคชระยะไกล และการแคชระยะไกล

กระบวนการพัฒนาของ Google ทำงานอย่างไร

สำหรับฐานโค้ดเซิร์ฟเวอร์ เราใช้เวิร์กโฟลว์การพัฒนาต่อไปนี้

  • โค้ดเซิร์ฟเวอร์ทั้งหมดของเราอยู่ในระบบควบคุมเวอร์ชันขนาดมหึมาหนึ่งเดียว
  • ทุกคนสร้างซอฟต์แวร์ของตัวเองด้วย Bazel
  • ทีมต่างๆ จะเป็นเจ้าของส่วนต่างๆ ของโครงสร้างแหล่งที่มา และทําให้คอมโพเนนต์ของตนพร้อมใช้งานเป็นเป้าหมาย BUILD
  • Branching จะใช้สำหรับจัดการการเผยแพร่เป็นหลัก ดังนั้น ทุกคนจึงพัฒนาซอฟต์แวร์ของตนเองตามการแก้ไขของหัวหน้า

Bazel คือหลักสำคัญของปรัชญานี้ เนื่องจาก Bazel กำหนดให้ต้องระบุทรัพยากร Dependency ทั้งหมดอย่างชัดเจน เราจึงสามารถคาดการณ์โปรแกรมและการทดสอบที่ได้รับผลกระทบจากการเปลี่ยนแปลง และตรวจสอบข้อมูลดังกล่าวก่อนส่งได้

ดูความเป็นมาเพิ่มเติมเกี่ยวกับกระบวนการพัฒนาของ Google ได้ในบล็อกเครื่องมือวิศวกร

เหตุใดคุณจึงเปิด Bazel

ซอฟต์แวร์การสร้างควรสนุกและง่าย งานสร้างที่ช้าและคาดเดาไม่ได้ทำให้การเขียนโปรแกรมเป็นเรื่องง่ายขึ้น

ทำไมฉันจึงควรใช้ Bazel

  • Bazel อาจช่วยให้ใช้เวลาสร้างเร็วขึ้น เพราะสามารถคอมไพล์ซ้ำเฉพาะไฟล์ที่ต้องคอมไพล์ใหม่เท่านั้น ในทำนองเดียวกัน ระบบอาจข้ามการทดสอบอีกครั้งที่รู้ว่าไม่ได้เปลี่ยนแปลง
  • Bazel สร้างผลลัพธ์เชิงกำหนด ซึ่งจะช่วยขจัดความคลาดเคลื่อนระหว่างบิลด์ที่เพิ่มขึ้นและบิลด์ที่สะอาด ตลอดจนแล็ปท็อปและระบบ CI ฯลฯ
  • Bazel สร้างแอปไคลเอ็นต์และเซิร์ฟเวอร์ที่ต่างกันโดยใช้เครื่องมือเดียวกันจากพื้นที่ทำงานเดียวกันได้ ตัวอย่างเช่น คุณสามารถเปลี่ยนโปรโตคอลของไคลเอ็นต์/เซิร์ฟเวอร์ในคอมมิตเดียว และทดสอบว่าแอปบนอุปกรณ์เคลื่อนที่ที่อัปเดตแล้วทำงานร่วมกับเซิร์ฟเวอร์ที่อัปเดต การสร้างทั้ง 2 อย่างด้วยเครื่องมือเดียวกันเพื่อรับประโยชน์ทั้งหมดที่กล่าวไว้ข้างต้นของ Bazel

ฉันจะดูตัวอย่างได้ไหม

มี โปรดดูตัวอย่างง่ายๆ หรืออ่านซอร์สโค้ดของ Bazel เพื่อดูตัวอย่างที่ซับซ้อนมากขึ้น

ร้านที่ดีที่สุดคืออะไร

Bazel โดดเด่นในการสร้างและทดสอบโปรเจ็กต์ด้วยพร็อพเพอร์ตี้ต่อไปนี้

  • โปรเจ็กต์ที่มีฐานของโค้ดขนาดใหญ่
  • โปรเจ็กต์ที่เขียนเป็นภาษาที่คอมไพล์ (หลายภาษา)
  • โปรเจ็กต์ที่ทำให้ใช้งานได้ในหลายแพลตฟอร์ม
  • โปรเจ็กต์ที่มีการทดสอบที่ครอบคลุม

ฉันจะเปิด Bazel ได้ที่ไหน

Bazel ทำงานบน Linux, macOS (OS X) และ Windows

การพอร์ตไปยังแพลตฟอร์ม UNIX อื่นๆ ควรทำได้ง่าย ตราบใดที่ JDK พร้อมใช้งานสำหรับแพลตฟอร์มดังกล่าว

ฉันไม่ควรใช้ Bazel ในการทำสิ่งใด

  • Bazel พยายามแคชอย่างชาญฉลาด ซึ่งหมายความว่าไม่เหมาะสำหรับการเรียกใช้การดำเนินการบิลด์ที่ไม่ควรแคชเอาต์พุต ตัวอย่างเช่น คุณไม่ควรเรียกใช้ขั้นตอนต่อไปนี้จาก Bazel
    • ขั้นตอนการรวบรวมที่ดึงข้อมูลจากอินเทอร์เน็ต
    • ขั้นตอนทดสอบที่เชื่อมต่อกับอินสแตนซ์ QA ของเว็บไซต์
    • ขั้นตอนการทำให้ใช้งานได้ที่เปลี่ยนการกำหนดค่าระบบคลาวด์ของเว็บไซต์
  • หากงานสร้างของคุณมีขั้นตอนยาวๆ ที่เรียงตามลำดับหลายขั้นตอน Bazel อาจช่วยคุณได้มากนัก คุณจะได้เพิ่มความเร็วด้วยการแบ่งก้าวยาวๆ เป็นเป้าหมายที่เล็กลงและแยกเป็นอิสระ ซึ่ง Bazel จะวิ่งพร้อมกันได้

ชุดฟีเจอร์ของ Bazel มีความเสถียรเพียงใด

ฟีเจอร์หลัก (C++, Java และกฎของเชลล์) มีการใช้งานอย่างกว้างขวางภายใน 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 ได้ อุปกรณ์เหล่านี้ทำงานโดยใช้ทรัพยากร Dependency เพียงไม่กี่รายการในระบบ UNIX ปกติ จึงควรติดตั้งภายในคอนเทนเนอร์ Docker ได้ง่าย

Bazel มีแบบแผนสำหรับการวางโครงสร้างโปรแกรมที่ซับซ้อนมากขึ้น ตัวอย่างเช่น โปรแกรม Java ที่ใช้ชุดไฟล์ข้อมูล หรือเรียกใช้โปรแกรมอื่นเป็นกระบวนการย่อย สามารถรวบรวมสภาพแวดล้อมอย่างเช่นที่เก็บถาวรแบบสแตนด์อโลน เพื่อให้สามารถใช้งานได้ในระบบต่างๆ รวมถึงอิมเมจ Docker

ฉันจะสร้างอิมเมจ Docker ด้วย Bazel ได้ไหม

ได้ คุณใช้กฎ Docker เพื่อสร้างอิมเมจ Docker ที่ทำซ้ำได้

Bazel จะทำให้บิลด์ของฉันทำซ้ำได้โดยอัตโนมัติไหม

สำหรับ Java และไบนารี C++ ถือว่าคุณไม่ได้เปลี่ยน Toolchain หากสร้างขั้นตอนที่เกี่ยวข้องกับสูตรอาหารที่กำหนดเอง (เช่น การดำเนินการไบนารีผ่านสคริปต์ Shell ภายในกฎ) คุณจะต้องระมัดระวังเป็นพิเศษ

  • อย่าใช้ทรัพยากร Dependency ที่ไม่ได้ประกาศไว้ การดำเนินการแบบแซนด์บ็อกซ์ (–spawn_strategy=sandboxed เฉพาะบน Linux) อาจช่วยค้นหาทรัพยากร Dependency ที่ไม่ได้ประกาศได้
  • หลีกเลี่ยงการจัดเก็บการประทับเวลาและ User-ID ในไฟล์ที่สร้างขึ้น ZIP และที่เก็บถาวรอื่นๆ มีแนวโน้มที่จะเกิดกรณีเช่นนี้มาก
  • หลีกเลี่ยงการเชื่อมต่อกับเครือข่าย การดำเนินการแบบแซนด์บ็อกซ์ก็ช่วยในเรื่องนี้ได้เช่นกัน
  • หลีกเลี่ยงกระบวนการที่ใช้ตัวเลขแบบสุ่ม โดยเฉพาะอย่างยิ่งการส่งผ่านพจนานุกรมจะเป็นแบบสุ่มในภาษาโปรแกรมหลายภาษา

คุณมีรุ่นแบบไบนารีไหม

ได้ คุณดูไบนารีที่เผยแพร่ล่าสุดได้และอ่านนโยบายการเผยแพร่

ฉันใช้ Eclipse/IntelliJ/XCode Bazel ทำงานร่วมกับ IDE อย่างไร

สําหรับ IntelliJ โปรดดู IntelliJ พร้อมปลั๊กอิน Bazel

สำหรับ XCode โปรดดูที่ Tulsi

สำหรับ Eclipse ให้ดูที่ปลั๊กอิน E4B

สำหรับ IDE อื่นๆ โปรดดูบล็อกโพสต์เกี่ยวกับวิธีการทำงานของปลั๊กอินเหล่านี้

ฉันใช้ Jenkins/CircleCI/TravisCI Bazel ทำงานร่วมกับระบบ CI อย่างไร

Bazel จะแสดงโค้ดสำหรับออกที่ไม่ใช่ 0 หากการเรียกใช้บิลด์หรือการทดสอบล้มเหลว และโค้ดนี้น่าจะเพียงพอสำหรับการผสานรวม CI พื้นฐาน เนื่องจาก Bazel ไม่จำเป็นต้องใช้บิลด์ที่สะอาดเพื่อความถูกต้อง ระบบจึงไม่ควรกำหนดค่าระบบ CI ให้ล้างก่อนที่จะเริ่มเรียกใช้บิลด์/ทดสอบ

ดูรายละเอียดเพิ่มเติมเกี่ยวกับรหัสการออกได้ในคู่มือผู้ใช้

ฟีเจอร์ในอนาคตที่เราจะมีใน Bazel มีอะไรบ้าง

ดู Roadmaps ของเรา

ฉันจะใช้ Bazel สำหรับโปรเจ็กต์ INSERT LANGUAGE HERE ได้ไหม

Bazel มีความยืดหยุ่น ทุกคนเพิ่มการรองรับภาษาใหม่ๆ ได้ มีการรองรับหลายภาษา ดูรายการคำแนะนำในสารานุกรม และไปที่ awesomebazel.com เพื่อดูรายการที่ครอบคลุมยิ่งขึ้น

หากต้องการพัฒนาส่วนขยายหรือศึกษาวิธีการทำงานของส่วนขยาย โปรดดูเอกสารประกอบสำหรับการขยาย Bazel

ฉันมีส่วนร่วมในฐานของโค้ด Bazel ได้ไหม

โปรดดูหลักเกณฑ์การมีส่วนร่วมของเรา

ทำไมถึงไม่พัฒนาทุกอย่างให้เสร็จในที่สาธารณะ

เรายังคงต้องเปลี่ยนโครงสร้างภายในโค้ดระหว่างโค้ดสาธารณะใน Bazel และส่วนขยายภายในของเราบ่อยครั้ง ซึ่งทำให้ยากต่อการพัฒนาอย่างมากในที่สาธารณะ

คุณดำเนินการโอเพนซอร์ส Bazel แล้วหรือยัง

Bazel โอเพนซอร์สยังอยู่ระหว่างดําเนินการ โดยเฉพาะอย่างยิ่ง เรากำลังดำเนินการเกี่ยวกับการทำให้ซอร์สแบบเปิด:

  • การทดสอบหน่วยและการผสานรวมของเราหลายรายการ (ซึ่งควรทำให้แพตช์ง่ายขึ้น)
  • การผสานรวม IDE เต็มรูปแบบ

นอกเหนือจากโค้ดแล้ว ในที่สุดแล้ว เราอยากให้การตรวจสอบโค้ด การติดตามข้อบกพร่อง และการตัดสินใจด้านการออกแบบทั้งหมดเกิดขึ้นต่อสาธารณะ โดยมีชุมชน Bazel เข้ามามีส่วนร่วมด้วย เรายังไม่ได้ดำเนินการดังกล่าว ดังนั้นการเปลี่ยนแปลงบางอย่างจะปรากฏขึ้นในที่เก็บ Bazel โดยไม่มีคำอธิบายที่ชัดเจน แม้จะไม่มีการแสดงความโปร่งใส เราก็ต้องการสนับสนุนนักพัฒนาซอฟต์แวร์ภายนอกและทำงานร่วมกัน ดังนั้นเรากำลังเริ่มใช้โค้ด แม้ว่าการพัฒนาบางอย่างจะยังเกิดขึ้นภายใน Google ก็ตาม โปรดแจ้งให้เราทราบหากมีสิ่งใดที่ไม่ชัดเจนหรือไม่ชอบธรรมเมื่อเราเปลี่ยนไปใช้โมเดลแบบเปิด

มีส่วนใดบ้างของ Bazel ที่จะไม่เป็นโอเพนซอร์สหรือไม่

ใช่ โค้ดพื้นฐานส่วนหนึ่งผสานรวมกับเทคโนโลยีเฉพาะของ Google หรือเรากำลังมองหาข้ออ้างในการนำออก (หรือมีทั้ง 2 อย่างนี้รวมกัน) ส่วนฐานของโค้ดเหล่านี้ไม่พร้อมใช้งานใน GitHub และอาจจะไม่มีเลย

ฉันจะติดต่อทีมได้อย่างไร

ติดต่อเราได้ที่ bazel-discuss@googlegroups.com

ฉันจะรายงานข้อบกพร่องได้ที่ใด

เปิดปัญหาใน GitHub

เกิดอะไรขึ้นกับคำว่า "Blaze" ในฐานของโค้ด

นี่คือชื่อภายในสำหรับเครื่องมือ โปรดเรียก Bazel ว่า Bazel

ทำไมโปรเจ็กต์อื่นๆ ของ Google (Android, Chrome) จึงใช้เครื่องมือบิลด์อื่นๆ

จนกว่าจะมีการเปิดตัว (อัลฟ่า) รุ่นแรก Bazel ไม่พร้อมใช้งานจากภายนอก ดังนั้นโปรเจ็กต์โอเพนซอร์ส เช่น Chromium และ Android จะใช้งานไม่ได้ นอกจากนี้ การขาดการรองรับ Windows ตั้งแต่แรกก็เป็นปัญหาในการสร้างแอปพลิเคชัน Windows เช่น Chrome เนื่องจากโครงการดังกล่าวเติบโตเต็มที่และมีความเสถียรมากขึ้นแล้ว โครงการโอเพนซอร์ส Android จึงอยู่ระหว่างการย้ายข้อมูลไปยัง Bazel

คำว่า "Bazel" ออกเสียงอย่างไร

คำว่า "ใบโหระพา" (สมุนไพร) ในภาษาอังกฤษแบบสหรัฐอเมริกาคือ "BAY-zel" คล้องจองกับคำว่า "hazel" IPA: /ความสามารถนีืซ์ทึ่/