Revision ff457284e2d067baf39f8e1fac604f34c3fa8c8c authored by martoon on 27 September 2023, 22:09:22 UTC, committed by martoon on 27 September 2023, 22:09:22 UTC
1 parent 8ef87ac
Raw File
repository_scope.rst
Scope of the Octez repository
=============================

The `Gitlab repository tezos/tezos <https://gitlab.com/tezos/tezos>`_
contains the source code for Octez, as well as :ref:`the embedded
economic protocols <embedded_protocols>` for Tezos.

Following widespread software engineering principles, a major part
of the code is structured in the form of libraries. Libraries foster
code reuse, by allowing to share code between the various Octez components
and/or the economic protocols, to build increasing levels of abstractions,
and so on.

Some of these libraries, such as ``lib_rpc`` or ``lib_error_monad``,
constitute an integral part of the project, in that they are directly linked
to Octez executables, while others, like ``lib_benchmark`` are used in
the development process as tools which allow developers to make
the software better.

Sometimes such a helper project is developed independently at first,
but later during its development it becomes significantly
coupled to one or more libraries developed as part of the Octez project.
Maintaining such a tool is frustrating, because it often breaks due to
changes in the Octez libraries it depends upon. A possible solution to
this problem would be to include the tool in ``tezos/tezos`` repository
and develop it together with Octez, which allows to discover breakages
more quickly and prevent or fix them immediately.

Because the number of helper projects in the Tezos ecosystem is still growing, it's impossible to
develop all of them within the Octez repository. Therefore it is necessary
to select which projects can be merged into the Octez repository and which
cannot. The currently accepted rule is that to be merged into Octez, an
external project should fulfill *all* the following criteria:

#. The project should depend on internal Octez libraries, as opposed to
   public APIs such as
   inter-process communication via RPC.
#. The dependency mentioned above should be unavoidable. That is, if there is
   another way to build the project, avoiding depending
   on internals of Octez, adding such an optional dependency won't qualify
   a project to be included.
#. The dependency should be on a feature or part of the codebase that is
   unstable enough to make it impractical to depend on released versions of
   Octez.
#. The project should be used regularly as a helper in developing Octez (e.g.
   run in the CI pipeline).
back to top