Skip to content

Glossary

Action Cache (AC)

The Action Cache (AC) stores commands along with their input digests, ensuring that actions with the same inputs and commands produce identical outputs. This cache allows NativeLink to reuse outputs from previous executions without rerunning the actions.

Bazel

Bazel is an open-source build and test tool developed by Google. In terms of NativeLink, Bazel is a client that communicates with the NativeLink scheduler to coordinate and execute various build tasks. As a client, Bazel is responsible for analyzing dependencies, scheduling tasks, and managing the build process. It interacts with the NativeLink to leverage features such as caching (CAS), distributed execution, and artifact management.

Buck2

Buck2 is a build system developed by Meta. In the context of NativeLink, Buck2 functions as a client, interacting with NativeLink’s server to coordinate and execute build tasks. As a client, Buck2 is responsible for analyzing dependencies, scheduling tasks, and managing the build process efficiently. It interacts with the NativeLink’s server to leverage features such as caching (CAS), distributed execution, and artifact management.

Content Addressable Storage (CAS)

Content Addressable Storage (CAS) is a storage system in which data is identified and accessed based on its content rather than its location. Each piece of data (artifact) is hashed, generating a unique identifier (digest) based on the data content. In NativeLink, the CAS stores the binary artifacts resulting from build actions. It stores identical data pieces only once and reuses the data pieces as needed.

Reclient

Reclient is an open source build tool created by Google as the successor to Goma. In terms of NativeLink, it’s a client that interacts with NativeLink’s server to leverage features such as caching (CAS), distributed execution, and artifact management. It’s mostly used to compile and build Chromium, an open source project behind the Google Chrome browser.

Hermeticity

For build systems, hermeticity refers to the property of creating isolated and self-contained environments for building and testing software. A hermetic build environment ensures that builds aren’t influenced by the external state, such as your local environment or variations in system dependencies. This isolation is achieved by using precise, versioned dependencies and fully specifying the build configuration. In NativeLink, hermeticity is achieved using Nix.

Monorepo

A monolithic repository, also referred to as a monorepo, contains the source code for multiple projects, often across different domains or areas of a single organization. They require unique tooling to handle multiple languages and technologies within the repository. A good example of a monorepo is the Chromium project.

NativeLink is open source and designed to enhance the build processes of large, complex projects. It offers an out-of-the-box remote execution server that integrates with clients like Bazel, allowing build and test actions to be offloaded to more powerful remote machines. This lets you to optimize resource usage and reduce build times.

Nix

Nix is an open source tool that builds packages in isolation from each other. It’s how builds remain hermetic in NativeLink. Nix ensures that builds are reproducible and don’t have undeclared dependencies, lets you share development and build environments for projects, and ensures that installing or upgrading packages can’t break other packages.

Remote caching

Remote caching optimizes the build and test processes by storing and reusing build artifacts on remote storage systems, like S3 or Redis. It reduces build times and improves compute resource usage by avoiding redundant computations.

Remote Execution Server

Remote execution refers to the process of running computational tasks, such as building, compiling, and testing code, on remote servers rather than on a local machine. By using remote servers, tasks can be distributed across multiple servers (that is, parallel processing). This can speed up build and test processes faster than local machines.

Remote Build Execution

The Remote Execution Protocol is a set of protocol buffers (As of V2) which act as standardized guidelines and API specifications that enable clients (such as build systems like Bazel) to distribute build and test action across multiple remote machines. This protocol facilitates the interaction between clients and remote execution services (like NativeLink), ensuring tasks are executed efficiently.

Rust

Rust is a programming language that prioritizes and enforces memory and thread safety for improved reliability, unlike other languages like Java. NativeLink source code is written in Rust.

Scheduler

The scheduler is a core component in NativeLink. It’s responsible for managing and coordinating the execution of tasks on remote workers based on resource availability and dependencies. It leverages the DAG representation of task dependencies to ensure tasks are executed in the correct order and optimizes the build process through parallel execution and caching mechanisms.

Simulations

A simulation is a computer-based model to replicate the behavior and interactions of robots within a virtual environment. People can test an analyze robotic systems without the need of physical robots in real-world environments. NativeLink executes high-fidelity simulations through its advanced caching system, distributed execution of design layouts (such as Verilog & VHDL), and continuous, real-time monitoring to detect anomalies.

Workers

The workers are one of the core components of NativeLink. They’re responsible for executing the build tasks assigned by the scheduler and create the build artifacts. The worker pool can consist of multiple workers running on powerful remote machines.