-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
1 changed file
with
47 additions
and
10 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,15 +1,52 @@ | ||
# Mezzotint | ||
# Mezzotint Tool | ||
|
||
**Mezzotint** is a software tool for bundling software in the | ||
containers only with the data that is needed on that container. | ||
## Concept | ||
|
||
It is build on the idea that software should tell what is needed, and | ||
what can be safely removed. Therefore, required "slice" of data | ||
is calculated. | ||
Mezzotint is an alternative solution to [Canonical Chisel](https://github.com/canonical/chisel) tool. | ||
|
||
Same as Chisel tool, Mezzotint is also designed to drop unnecessary libraries and files from a container, thus minimising its overall size and convert a typical OCI container to be close as application bundle, keeping isolation and scalability features. | ||
|
||
Content of a container is expected to be provisioned from a package repository and have a clear structure of package dependencies. Its content is specified in a profile as a short set of rules. | ||
|
||
However, in contrast to Canonical's Chisel, Mezzotint: | ||
|
||
- Designed to be distribution-agnostic, as long as a distribution is using a package manager. | ||
- Does not need a carefully maintained [database of package descriptions](https://github.com/canonical/chisel-releases), which has to be specific to a particular Linux distribution version. | ||
- Released under Apache 2.0 licence. | ||
|
||
Essentially, Mezzotint is trying to `actually` follow the point of Michelangelo, | ||
removing everything unnecessary from a block of marble to make a statue. | ||
Both Chisel and Mezzotint tools facing the same pain point in their approach: | ||
not everything that is linked needs to be linked, and not everything that is | ||
packaged and thus is as a dependency, should be there in certain cases. | ||
And to figure-out what is needed and what is not needed — is not the easiest | ||
task to do it manually. | ||
|
||
## Use Cases | ||
|
||
Mezzotint use case is pretty simple, coined by a French writer, poet, journalist and pioneering aviator: | ||
|
||
> A designer knows he has achieved perfection not when there is nothing left | ||
to add, but when there is nothing left to take away. — *Antoine de Saint-Exupery* | ||
|
||
Mezzotint should be able to be used in: | ||
|
||
- containers | ||
- embedded Linux images | ||
- immutable systems | ||
|
||
As software developers, these features will come to true one day, but with | ||
your Pull Requests, ideas and other contributions even faster! 😃 | ||
|
||
## Documentation | ||
|
||
To get Mezzotint installed, quck-start guide or full featured walk-through, please visit the [complete documentation](https://mezzotint.readthedocs.io/en/latest/) online. | ||
|
||
## Limitations | ||
|
||
Once you mezzotint your container, nothing else left on it except | ||
only your software with all the required dynamic libraires and other | ||
files. That means that you essentially cannot do any changes to your | ||
container without fully rebuilding it. | ||
Mezzotint is in its early continuous development phase and should be | ||
considered as **experimental software**. | ||
|
||
1. Mezzotint currently works only with containers of OCI standard. However, there are plans to expand it to the actual provisioned images. | ||
2. At the moment integration with a package manager is implemented only for Debian package manager, covering only "Debian family" distributions, such as Ubuntu, Mint, Debian itself etc | ||
3. It is tested only on Ubuntu LTS 22.04 so far |