Blame README.md

Packit Service 6eb7b9
# libostree
rpm-build 0fba15
rpm-build 0fba15
This project is now known as "libostree", though it is still appropriate to use
rpm-build 0fba15
the previous name: "OSTree" (or "ostree"). The focus is on projects which use
rpm-build 0fba15
libostree's shared library, rather than users directly invoking the command line
rpm-build 0fba15
tools (except for build systems). However, in most of the rest of the
rpm-build 0fba15
documentation, we will use the term "OSTree", since it's slightly shorter, and
rpm-build 0fba15
changing all documentation at once is impractical. We expect to transition to
rpm-build 0fba15
the new name over time.
rpm-build 0fba15
rpm-build 0fba15
As implied above, libostree is both a shared library and suite of command line
rpm-build 0fba15
tools that combines a "git-like" model for committing and downloading bootable
rpm-build 0fba15
filesystem trees, along with a layer for deploying them and managing the
rpm-build 0fba15
bootloader configuration.
rpm-build 0fba15
rpm-build 0fba15
The core OSTree model is like git in that it checksums individual files and has
rpm-build 0fba15
a content-addressed-object store. It's unlike git in that it "checks out" the
rpm-build 0fba15
files via hardlinks, and they thus need to be immutable to prevent corruption.
rpm-build 0fba15
Therefore, another way to think of OSTree is that it's just a more polished
rpm-build 0fba15
version of
rpm-build 0fba15
[Linux VServer hardlinks](http://linux-vserver.org/index.php?title=util-vserver:Vhashify&oldid=2285).
rpm-build 0fba15
rpm-build 0fba15
**Features:**
rpm-build 0fba15
rpm-build 0fba15
 - Transactional upgrades and rollback for the system
rpm-build 0fba15
 - Replicating content incrementally over HTTP via GPG signatures and "pinned TLS" support
rpm-build 0fba15
 - Support for parallel installing more than just 2 bootable roots
rpm-build 0fba15
 - Binary history on the server side (and client)
rpm-build 0fba15
 - Introspectable shared library API for build and deployment systems
rpm-build 0fba15
 - Flexible support for multiple branches and repositories, supporting
rpm-build 0fba15
   projects like [flatpak](https://github.com/flatpak/flatpak) which
rpm-build 0fba15
   use libostree for applications, rather than hosts.
rpm-build 0fba15
Packit Service 6eb7b9
## Documentation
Packit Service 6eb7b9
Packit Service 6eb7b9
For more information, see the [project documentation](docs/index.md) or the
Packit Service 6eb7b9
[project documentation website](https://ostreedev.github.io/ostree).
Packit Service 6eb7b9
Packit Service 6eb7b9
## Operating systems and distributions using OSTree
rpm-build 0fba15
rpm-build 0fba15
[Endless OS](https://endlessos.com/) uses libostree for their host system as
rpm-build 0fba15
well as flatpak. See
rpm-build 0fba15
their [eos-updater](https://github.com/endlessm/eos-updater)
rpm-build 0fba15
and [deb-ostree-builder](https://github.com/dbnicholson/deb-ostree-builder)
rpm-build 0fba15
projects.
rpm-build 0fba15
rpm-build 0fba15
Fedora derivatives use rpm-ostree (noted below); there are 3 variants using OSTree:
rpm-build 0fba15
rpm-build 0fba15
 - [Fedora CoreOS](https://getfedora.org/en/coreos/)
rpm-build 0fba15
 - [Fedora Silverblue](https://silverblue.fedoraproject.org/)
rpm-build 0fba15
 - [Fedora IoT](https://iot.fedoraproject.org/)
rpm-build 0fba15
rpm-build 0fba15
Red Hat Enterprise Linux CoreOS is a derivative of Fedora CoreOS, used in [OpenShift 4](https://try.openshift.com/).
rpm-build 0fba15
The [machine-config-operator](https://github.com/openshift/machine-config-operator/blob/master/docs/OSUpgrades.md)
rpm-build 0fba15
manages upgrades.  RHEL CoreOS is also the successor to RHEL Atomic Host, which
rpm-build 0fba15
uses rpm-ostree as well.
rpm-build 0fba15
rpm-build 0fba15
[GNOME Continuous](https://wiki.gnome.org/Projects/GnomeContinuous) is
rpm-build 0fba15
where OSTree was born - as a high performance continuous delivery/testing
rpm-build 0fba15
system for GNOME.
rpm-build 0fba15
rpm-build 0fba15
[Liri OS](https://liri.io/download/silverblue/) has the option to install
rpm-build 0fba15
their distribution using ostree.
rpm-build 0fba15
Packit Service 6eb7b9
## Distribution build tools
rpm-build 0fba15
rpm-build 0fba15
[meta-updater](https://github.com/advancedtelematic/meta-updater) is
rpm-build 0fba15
a layer available for [OpenEmbedded](http://www.openembedded.org/wiki/Main_Page)
rpm-build 0fba15
systems.
rpm-build 0fba15
rpm-build 0fba15
[QtOTA](http://doc.qt.io/QtOTA/) is Qt's over-the-air update framework
rpm-build 0fba15
which uses libostree.
rpm-build 0fba15
rpm-build 0fba15
The [BuildStream](https://gitlab.com/BuildStream/buildstream) build and
rpm-build 0fba15
integration tool supports importing and exporting from libostree repos.
rpm-build 0fba15
rpm-build 0fba15
Fedora [coreos-assembler](https://github.com/coreos/coreos-assembler) is
rpm-build 0fba15
the build tool used to generate Fedora CoreOS derivatives.
rpm-build 0fba15
Packit Service 6eb7b9
## Projects linking to libostree
rpm-build 0fba15
rpm-build 0fba15
[rpm-ostree](https://github.com/projectatomic/rpm-ostree) is used by the
rpm-build 0fba15
Fedora-derived operating systems listed above.  It is a full hybrid
rpm-build 0fba15
image/package system.  By default it uses libostree to atomically replicate a base OS
rpm-build 0fba15
(all dependency resolution is done on the server), but it supports "package layering", where
rpm-build 0fba15
additional RPMs can be layered on top of the base.  This brings a "best of both worlds""
rpm-build 0fba15
model for image and package systems.
rpm-build 0fba15
rpm-build 0fba15
[eos-updater](https://github.com/endlessm/eos-updater) is a daemon that implements updates
rpm-build 0fba15
on EndlessOS.
rpm-build 0fba15
rpm-build 0fba15
[flatpak](https://github.com/flatpak/flatpak) uses libostree for desktop
rpm-build 0fba15
application containers. Unlike most of the other systems here, flatpak does not
rpm-build 0fba15
use the "libostree host system" aspects (e.g. bootloader management), just the
rpm-build 0fba15
"git-like hardlink dedup". For example, flatpak supports a per-user OSTree
rpm-build 0fba15
repository.
rpm-build 0fba15
Packit Service 6eb7b9
## Language bindings
rpm-build 0fba15
rpm-build 0fba15
libostree is accessible via [GObject Introspection](https://gi.readthedocs.io/en/latest/);
rpm-build 0fba15
any language which has implemented the GI binding model should work.
rpm-build 0fba15
For example, Both [pygobject](https://pygobject.readthedocs.io/en/latest/)
rpm-build 0fba15
and [gjs](https://gitlab.gnome.org/GNOME/gjs) are known to work
rpm-build 0fba15
and further are actually used in libostree's test suite today.
rpm-build 0fba15
rpm-build 0fba15
Some bindings take the approach of using GI as a lower level and
rpm-build 0fba15
write higher level manual bindings on top; this is more common
rpm-build 0fba15
for statically compiled languages.  Here's a list of such bindings:
rpm-build 0fba15
rpm-build 0fba15
 - [ostree-go](https://github.com/ostreedev/ostree-go/)
rpm-build 0fba15
 - [ostree-rs](https://gitlab.com/fkrull/ostree-rs/)
rpm-build 0fba15
Packit Service 6eb7b9
## Building
rpm-build 0fba15
rpm-build 0fba15
Releases are available as GPG signed git tags, and most recent
rpm-build 0fba15
versions support extended validation using
rpm-build 0fba15
[git-evtag](https://github.com/cgwalters/git-evtag).
rpm-build 0fba15
rpm-build 0fba15
However, in order to build from a git clone, you must update the
rpm-build 0fba15
submodules.  If you're packaging OSTree and want a tarball, I
rpm-build 0fba15
recommend using a "recursive git archive" script.  There are several
rpm-build 0fba15
available online;
rpm-build 0fba15
[this code](https://github.com/ostreedev/ostree/blob/master/packaging/Makefile.dist-packaging#L11)
rpm-build 0fba15
in OSTree is an example.
rpm-build 0fba15
rpm-build 0fba15
Once you have a git clone or recursive archive, building is the
rpm-build 0fba15
same as almost every autotools project:
rpm-build 0fba15
rpm-build 0fba15
```
rpm-build 0fba15
git submodule update --init
rpm-build 0fba15
env NOCONFIGURE=1 ./autogen.sh
rpm-build 0fba15
./configure --prefix=...
rpm-build 0fba15
make
rpm-build 0fba15
make install DESTDIR=/path/to/dest
rpm-build 0fba15
```
rpm-build 0fba15
Packit Service 6eb7b9
## Contributing
rpm-build 0fba15
rpm-build 0fba15
See [Contributing](docs/CONTRIBUTING.md).
rpm-build 0fba15
Packit Service 6eb7b9
## Licensing
rpm-build 0fba15
rpm-build 0fba15
The licensing for the *code* of libostree can be canonically found in the individual files;
rpm-build 0fba15
and the overall status in the [COPYING](https://github.com/ostreedev/ostree/blob/master/COPYING)
rpm-build 0fba15
file in the source.  Currently, that's LGPLv2+.  This also covers the man pages and API docs.
rpm-build 0fba15
rpm-build 0fba15
The license for the manual documentation in the `doc/` directory is:
rpm-build 0fba15
`SPDX-License-Identifier: (CC-BY-SA-3.0 OR GFDL-1.3-or-later)`
rpm-build 0fba15
This is intended to allow use by Wikipedia and other projects.
rpm-build 0fba15
rpm-build 0fba15
In general, files should have a `SPDX-License-Identifier` and that is canonical.