Skip to content

Commit

Permalink
Update README.md
Browse files Browse the repository at this point in the history
  • Loading branch information
isbm committed Nov 30, 2023
1 parent bace07d commit 84628fb
Showing 1 changed file with 47 additions and 10 deletions.
57 changes: 47 additions & 10 deletions README.md
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

0 comments on commit 84628fb

Please sign in to comment.