| Moby Project Roadmap | |
| ==================== | |
| ### How should I use this document? | |
| 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. | |
| ### How can I help? | |
| Short term objectives are listed in | |
| [Issues](https://github.com/moby/moby/issues?q=is%3Aopen+is%3Aissue+label%3Aroadmap). 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. | |
| ### How can I add something to the roadmap? | |
| 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. | |
| # 1. Features and refactoring | |
| ## 1.1 Runtime improvements | |
| 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](https://containerd.io). | |
| 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](https://github.com/moby/moby/issues/38043) Proposal: containerd image integration | |
| ## 1.2 Image Builder | |
| Work is ongoing to integrate [BuildKit](https://github.com/moby/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](https://github.com/tonistiigi/buildkit-pack) 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](https://github.com/moby/buildkit/tree/master/frontend/dockerfile) | |
| with separate new features defined with go build tags. | |
| Tracking issues: | |
| - [#32925](https://github.com/moby/moby/issues/32925) discussion: builder future: buildkit | |
| ## 1.3 Rootless Mode | |
| 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](https://github.com/moby/moby/issues/37375) Proposal: allow running `dockerd` as an unprivileged user (aka rootless mode) | |
| ## 1.4 Testing | |
| 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](https://github.com/moby/moby/issues/32866) Replace integration-cli suite with API test suite | |
| ## 1.5 Internal decoupling | |
| 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](https://github.com/moby/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"](https://godoc.org/github.com/docker/docker/daemon#Daemon) object, | |
| should be split into smaller, more manageable, and more testable components. |