Buck (software)
Buck is a multi-language build system developed and used by Meta Platforms, Inc. It was designed for building small, reusable modules consisting of code and resources within a monorepo.[5] It supports many programming languages, including C++, Swift, Shell, Java, Kotlin, Python, Lua, OCaml, Rust and Go. It can produce binary outputs for a variety of target platforms including IOS, Android, .NET and Java VM runtimes. Buck1 was licensed under the Apache License 2.0, while Buck2 is licensed under either MIT OR Apache License 2.0.[3][4]
Original author(s) | Michael Bolin |
---|---|
Developer(s) | Meta Platforms, Inc. |
Initial release | April 17, 2013[1] |
Stable release | 2021.01.12.01
/ January 12, 2021[2] |
Repository | |
Written in | Buck1 in Java, Buck2 in Rust |
Operating system | Cross-platform |
License | MIT[3] OR Apache License 2.0[4] |
Website | buck2 |
Buck requires the explicit declaration of dependencies. Because all dependencies are explicit and Buck has a directed acyclic graph of all source files and build targets, Buck can perform incremental recompilation, only rebuilding targets downstream of files that have changed. Buck computes a key for each target that is a hash of the contents of the files it depends on. It stores a mapping from that key to the build target in a build cache.
History
In 2013, Buck1 was released. One of the key features was the ability to share build results between multiple developers and continuous integration (CI), as Buck1 supports a HTTP Cache API.[6]
In 2023, Buck2 was released, claiming that builds are 2x as fast as compared to Buck1. One of the largest changes from Buck1 is that the core is written in Rust instead of Java, and rules are written outside the core in Starlark (the language created for the Bazel build system).[7]
References
- Bolin, Michael (May 14, 2013). "Buck: How we build Android apps at Facebook". Notes. Facebook. Facebook Engineering. Retrieved 2019-07-16.
- "Releases · facebook/buck". GitHub.
- "buck/license-mit". December 1, 2022. Retrieved 2023-04-19.
- "buck/license-apache". December 1, 2022. Retrieved 2023-04-19.
- "Overview". Buck: a build tool. Retrieved 2018-07-16.
Buck is designed to build multiple deliverables from a single repository—that is, a monorepo—rather than from multiple repositories
- Bluestein, Nofar. "Introducing Cache Intelligence for Faster, More Efficient Continuous Integration Builds | Harness". Harness.io. Retrieved 2023-06-06.
- Krill, Paul (2023-04-06). "Meta open-sources 'significantly faster' build system". InfoWorld. Retrieved 2023-06-06.