This document provides description of items that the project decided to prioritize. This should serve as a reference point for Moby contributors to understand where the project is going, and help determine if a contribution could be conflicting with some longer term plans.
The fact that a feature isn't listed here doesn't mean that a patch for it will automatically be refused! We are always happy to receive patches for new cool features we haven't thought about, or didn't judge to be a priority. Please however understand that such patches might take longer for us to review.
Short term objectives are listed in Issues. Our goal is to split down the workload in such way that anybody can jump in and help. Please comment on issues if you want to work on it to avoid duplicating effort! Similarly, if a maintainer is already assigned on an issue you'd like to participate in, pinging him on GitHub to offer your help is the best way to go.
The roadmap process is new to the Moby Project: we are only beginning to structure and document the project objectives. Our immediate goal is to be more transparent, and work with our community to focus our efforts on fewer prioritized topics.
We hope to offer in the near future a process allowing anyone to propose a topic to the roadmap, but we are not quite there yet. For the time being, it is best to discuss with the maintainers on an issue, in the Slack channel, or in person at the Moby Summits that happen every few months.
Over time we have accumulated a lot of functionality in the container runtime aspect of Moby while also growing in other areas. Much of the container runtime pieces are now duplicated work available in other, lower level components such as containerd.
Moby currently only utilizes containerd for basic runtime state management, e.g. starting and stopping a container, which is what the pre-containerd 1.0 daemon provided. Now that containerd is a full-fledged container runtime which supports full container life-cycle management, we would like to start relying more on containerd and removing the bits in Moby which are now duplicated. This will necessitate a significant effort to refactor and even remove large parts of Moby's codebase.
Tracking issues:
- #38043 Proposal: containerd image integration
Work is ongoing to integrate BuildKit into Moby and replace the "v0" build implementation. Buildkit offers better cache management, parallelizable build steps, and better extensibility while also keeping builds portable, a chief tenent of Moby's builder.
Upon completion of this effort, users will have a builder that performs better while also being more extensible, enabling users to provide their own custom syntax which can be either Dockerfile-like or something completely different.
See buildpacks on buildkit as an example of this extensibility.
New features for the builder and Dockerfile should be implemented first in the
BuildKit backend using an external Dockerfile implementation from the container
images. This allows everyone to test and evaluate the feature without upgrading
their daemon. New features should go to the experimental channel first, and can be
part of the docker/dockerfile:experimental
image. From there they graduate to
docker/dockerfile:latest
and binary releases. The Dockerfile frontend source
code is temporarily located at
https://github.com/moby/buildkit/tree/master/frontend/dockerfile
with separate new features defined with go build tags.
Tracking issues:
- #32925 discussion: builder future: buildkit
Running the daemon requires elevated privileges for many tasks. We would like to
support running the daemon as a normal, unprivileged user without requiring suid
binaries.
Tracking issues:
- #37375 Proposal: allow running
dockerd
as an unprivileged user (aka rootless mode)
Moby has many tests, both unit and integration. Moby needs more tests which can cover the full spectrum functionality and edge cases out there.
Tests in the integration-cli
folder should also be migrated into (both in
location and style) the integration
folder. These newer tests are simpler to
run in isolation, simpler to read, simpler to write, and more fully exercise the
API. Meanwhile tests of the docker CLI should generally live in docker/cli.
Tracking issues:
- #32866 Replace integration-cli suite with API test suite
A lot of work has been done in trying to decouple Moby internals. This process of creating
standalone projects with a well defined function that attract a dedicated community should continue.
As well as integrating containerd
we would like to integrate BuildKit
as the next standalone component.
We see gRPC as the natural communication layer between decoupled components.
In addition to pushing out large components into other projects, much of the internal code structure, and in particular the "Daemon" object, should be split into smaller, more manageable, and more testable components.