Penglihatan Bazel

Setiap developer software dapat membangun, menguji, dan mengemas project apa pun secara efisien, dengan berbagai ukuran atau kompleksitas, dengan alat yang mudah diadopsi dan diperluas.

  • Insinyur dapat menganggap hal-hal dasar build begitu saja. Developer software berfokus pada proses kreatif pembuatan kode karena proses mekanis build dan pengujian diselesaikan. Saat menyesuaikan sistem build untuk mendukung bahasa baru atau kebutuhan organisasi yang unik, pengguna berfokus pada aspek ekstensibilitas yang unik untuk kasus penggunaan mereka, tanpa harus membuat ulang sistem pipa dasar.

  • Insinyur dapat dengan mudah berkontribusi pada project apa pun. Developer yang ingin mulai mengerjakan project baru dapat meng-clone project dan menjalankan build. Tidak perlu konfigurasi lokal - ini sudah berfungsi. Dengan eksekusi jarak jauh lintas platform, mereka dapat bekerja pada mesin apa pun di mana saja dan sepenuhnya menguji perubahannya terhadap semua platform yang ditargetkan project. Engineer dapat dengan cepat mengonfigurasi build untuk project baru atau memigrasikan build yang ada secara bertahap.

  • Project dapat diskalakan ke semua ukuran codebase dan tim dengan ukuran apa pun. Pengujian inkremental yang cepat memungkinkan tim memvalidasi sepenuhnya setiap perubahan sebelum diterapkan. Hal ini tetap berlaku bahkan saat repositori berkembang, project menjangkau beberapa repo, dan berbagai bahasa diperkenalkan. Infrastruktur tidak memaksa developer untuk mengorbankan cakupan pengujian untuk kecepatan build.

Kami percaya Bazel memiliki potensi untuk memenuhi visi ini.

Bazel dibuat dari nol untuk memungkinkan build yang dapat direproduksi (serangkaian input tertentu akan selalu menghasilkan output yang sama) dan portabel (build dapat dijalankan di mesin apa pun tanpa memengaruhi output tersebut).

Karakteristik ini mendukung inkrementalitas yang aman (mem-build ulang input yang diubah saja tidak akan menimbulkan risiko kerusakan) dan distribusi (tindakan build terisolasi dan dapat dipindahkan). Dengan meminimalkan pekerjaan yang diperlukan untuk melakukan build yang benar dan memparalelkan pekerjaan tersebut di beberapa core dan sistem jarak jauh, Bazel dapat mempercepat proses build.

Lapisan abstraksi Bazel — petunjuk khusus untuk bahasa, platform, dan toolchain yang diimplementasikan dalam bahasa ekstensibilitas sederhana — memungkinkannya diterapkan dengan mudah ke konteks apa pun.

Kompetensi inti Bazel

  1. Bazel mendukung build dan pengujian multi-bahasa dan multi-platform. Anda dapat menjalankan satu perintah untuk membangun dan menguji seluruh hierarki sumber, apa pun kombinasi bahasa dan platform yang Anda targetkan.
  2. Build Bazel cepat dan benar. Setiap build dan pengujian yang dijalankan bertambah, pada mesin developer dan di CI.
  3. Bazel menyediakan bahasa yang seragam dan dapat diperluas untuk menentukan build bagi bahasa atau platform apa pun.
  4. Bazel memungkinkan build Anda diskalakan dengan terhubung ke layanan eksekusi dan cache jarak jauh.
  5. Bazel berfungsi di semua platform pengembangan utama (Linux, MacOS, dan Windows).
  6. Kami setuju bahwa penggunaan Bazel memerlukan upaya, tetapi penggunaan bertahap dapat dilakukan. Bazel berinteraksi dengan alat standar de-facto untuk bahasa/platform tertentu.

Melayani komunitas bahasa

Software engineering berkembang dalam konteks komunitas bahasa — biasanya, kelompok orang yang mengatur secara mandiri yang menggunakan alat dan praktik umum.

Agar bermanfaat bagi anggota komunitas bahasa, aturan Bazel berkualitas tinggi harus tersedia dan terintegrasi dengan alur kerja dan konvensi komunitas tersebut.

Bazel berkomitmen untuk membuatnya dapat diperluas dan terbuka, serta mendukung seperangkat aturan yang baik untuk bahasa apa pun.

Persyaratan untuk membuat kumpulan aturan yang baik

  1. Aturan harus mendukung pembuatan dan pengujian yang efisien untuk bahasa, termasuk cakupan kode.
  2. Aturan ini harus berantarmuka dengan "pengelola paket" yang banyak digunakan untuk bahasa (seperti Maven untuk Java), dan mendukung jalur migrasi inkremental dari sistem build lain yang banyak digunakan.
  3. Aturannya harus dapat diperluas dan memiliki interoperabilitas, sesuai dengan prinsip "Bazel sandwich".
  4. Aturan tersebut harus siap dijalankan dari jarak jauh. Dalam praktiknya, hal ini berarti dapat dikonfigurasi menggunakan mekanisme toolchain.
  5. Aturan tersebut (dan Bazel) harus berinteraksi dengan IDE yang digunakan secara luas untuk bahasa tersebut, jika ada.
  6. Aturan tersebut harus memiliki dokumentasi yang menyeluruh dan dapat digunakan, dengan materi pengantar untuk pengguna baru dan dokumen yang komprehensif untuk pengguna ahli.

Setiap item ini penting dan hanya jika digunakan bersama, item tersebut mampu memberikan kompetensi Bazel bagi ekosistem khusus mereka.

Prinsip tersebut juga, pada umumnya, sudah memadai - setelah semuanya terpenuhi, Bazel sepenuhnya memberikan nilainya kepada anggota komunitas bahasa tersebut.