On the road to Cozy version 3

On the road to Cozy version 3

TL; DR:

Cozy is an Open Source / Free Software project that is both audacious and moving fast: applications are getting better, users are numerous and the community is very active. Financially, things are going well, the recent funding roud enables us to hire more developers. There is an issue though: the price of hosting a Cozy instance. Until then, it was a minor issue as we focused on building software, but now that we need to scale in order to reach thousands and soon millions of users, this has become a pressing issue.

The solution we have picked is a rewrite of the back-end side of Cozy. This rewriting has already started, and as it's a significant change, it has an impact on the whole Cozy project.

Rewriting means that there will be a transition period where the future version will have less features than the existing one.

In order to limit the impact of these changes, we will maintain the existing version while building the new one so that everybody (hosted instances users, self-hosting users and application developers) has time to adjust to the changes brought by Cozy version 3. In order to ease the transition for application developers, a new library called Cozy-client-js is being created. Its documentation is already on-line|.

Getting into more details

Cozy can be defined as a free software / open source project that has industrial goals. This means that we work with different stakeholders, including our community of users and application developers but also hosting providers. All of the stakeholders participation are needed for the project to be successful and meaningful. We get two requests quite frequently from them. The first, coming from power users is "when will we get the ability to host several users on a Cozy?". Hosting providers have another request: when will we have a scalable version of Cozy, so that hosting large numbers of Cozy instances (up to millions of users) is economically doable?

For now, we cannot give positive answers to these questions, due to existing limitations of the technologies used to build Cozy. This is frustrating for everyone involved. This is why we're working on Cozy version 3, which is a rewriting of the back-end part of the software to fix both issues.

Version 3 development has already started and it's moving along nicely. Bruno Michel, and its back-end team, has made significant strides, but a lot remains to be done before the current version can be replaced by version 3. I'll explain below what will change with version 3 and how we will implement it.

From a technical standpoint

Long story short, the back-end part of the Cozy project is currently written with NodeJS. Version 3 will be a rewriting in the Go programming language.

What does it mean for self hosting?

Self hosting users will get the ability to run several Cozy instances without needed significantly more RAM. In the current version, running two Cozies means using twice the amount of RAM. With Cozy version 3, additional resource consumption for each instance will be very limited.

An additional benefit is that packaging Cozy for GNU/Linux servers is going to be a lot more straightforward: installation and maintenance will be greatly simplified.

What does it means for users of Beta instances hosted by Cozy?

The calendar still needs some fine-tuning, but here is what we're considering:

  1. Members of the community who do not need to migrate their data to the new back-end will benefit from brand new instances as soon as we put them into production, so they'll be served first.
  2. We would like to migrate beta instances to the new back-end around Q3 2017 if everything goes as planned.

Hosting providers and commercial partners

In order for our partners to offer reasonable prices for a Cozy instance, they need to make sure that computing resources used each additional instance is limited even at a large scale. This is currently not the case, but it will be with version 3. This means that Cozy will be able to reach a much broader audience thanks to an inexpensive solution which has to compete with the free model used by organizations that monetise personal data.

Developers building Cozy applications

For developers that rely on the client-side model for their apps, a simple migration will be needed. Instead of relying on the Cozy-browser-SDK library, they will have to use our new library called Cozy-Client-JS, which is very similar. Cozy-Client-JS can be used with both the old and the new back-ends and its documentation is already available. The existing tutorial will be updated in a few days in order to reflect the library change.

On the other hand, applications built with a server-side component will need more investment as NodeJS support is not scheduled at this point in time.

How is the transition going to happen?

From now on, we will focus our development efforts on Cozy version 3 so that we can offer an early version as soon as possible. In other words, we will avoid spending time on the old version and feedback that will be provided by the community will be mostly used to improve version 3 applications. In the same vein, we will not offer new Cozy instances running the current version. New instances will be created when we'll be ready for version 3 to be put into Beta production.

Also, we aim at shipping version 3 ASAP so that it can be tested by the community. In order to ship quickly, we will focus on having a limited feature set around file synchronization. Then, we will build on top of this by adding more features to the back-end in order to get close to what is currently possible with the current version.

Here is a preview of the road map:

Roadmap Cozy 3.0

  • During Q4 2016 - Begin rewriting of the current back-end.
  • End of Q1 2017 - Cozy 3.0 so that it offers file synchronization:
    • Files and Photos apps are now compatible with version 3.
    • Cozy 3.0 is being put into production in limited numbers.
    • A limited numbers of Beta-testers positions are opened for people who do not need data to be migrated.
    • File sync with GNU/Linux, MacOS and Android.
  • End of Q2 2017 - Data aggregation:
    • Front apps: data aggregation.
    • More Beta instances are created. Some Beta users are migrated to version 3.
    • Starting encryption features.
    • Adding scalability features.
  • End of Q3 2017 - Cozy, your digital home:
    • All Beta users have been migrated to version 3.
    • Fine-tuning scalability features.
    • Contacts & Agenda apps are running.
    • Self-hosters can deploy Cozy 3.0.

Other questions and FAQ

We have created an FAQ where we will be answering questions you may have about the transition to Cozy version 3. Come with your questions, we'll do our best to answer them!