Skip to content

Switching to the open-core model #1170

@jackycute

Description

@jackycute

Dear markdown hackers,

Thanks for your long-standing support.
Reflecting on what we learned over the past one and a half years, we decide that we want to move CodiMD and HackMD into the open-core model to better address the needs of the community.

What did we learn?

Back in October 2017, when we forked HackMD enterprise edition (EE) from HackMD community edition (CE), we had two goals: In addition to supporting ourselves, we wanted to keep the HackMD open source community active.

To achieve the second goal, we promised not blocking any pull requests, even those with features similar to HackMD(EE). We kept patching vulnerabilities and fixing bugs. And we invited two community members to be the community's advocates. They did a great job moderating CE and making sure we kept our promises.

Still, due to the lack of clear communication with the community at large on our part, the confusion between the two versions persisted, even after we changed the name of HackMD(CE) to CodiMD. Issues were posted in the wrong channel, same questions regarding the forking decision got asked over and over again, and extra burden were placed on our community advocates to explain the naming, the difference, and the history between HackMD and CodiMD. Moreover, the uncertainty of our continuous support for CodiMD deterred contributions. We've seen the activity of the community decreased.

From studying other successful open source projects, we learned that for an open source community to thrive, continuous support and maintenance promise from an (often commercial) entity is essential. It is imperative that we show strong commitment to the project, take full responsibility directing the open source project as well as the commercial one, and keep the fine balance between the two goals.

What do we mean by open-core model?

The HackMD production service at hackmd.io and HackMD(EE) had gone through major refactoring since the fork. It is now written in Typescript for easier maintenance and its performance improved to support the users on our production server. We will create a new "HackMD-core" repository, which contains the core code base of HackMD. We will then refactor CodiMD and replace its core with the HackMD-core.

Current and future features on both HackMD and CodiMD will be offered as modules that could be plugged into the core. All current CodiMD exclusive features will be refactored as modules and offered with the core as a work-out-of-box bundle. These include:

  • Dark mode
  • CLI
  • Minio image upload
  • OpenID authentication
  • MatterMost Authentication

Some current HackMD exclusive features will be added to the CodiMD bundle as well. These plug-ins will also be open source. They include:

  • Book mode
  • Profile page
  • User settings
  • Embedded note
  • Speakerdeck rendering
  • Google drive integration

We will uphold the following principles during and after the migration of the CodiMD project:

  1. the database should be backward compatible so there would be no worries over existing CodiMD content.
  2. the code base should be modularized and API would be clear so the community could build cool things on it.

Open-Core Road map

Here's our preliminary road map to the migration:

  1. Modularization pilot:
    • Authentication module
    • Book mode
  2. Core refactoring and performance improvement
  3. Modularizing:
    • Profile page
    • Full-text searching on profile page
    • Settings
    • slide mode
    • Publish mode
    • Editor mode features
    • Embedded note
    • Permission improvement
    • Change notification

License

The HackMD-core repository and all free plug-in modules will be licensed under Apache 2.0, while paid modules will be licensed under our own commercial license. The license of CodiMD and CodiMD exclusive features will have to remain AGPL v3 even after we finish refactoring.

Discussion

We want to thank the community for your patience over the past one and a half years. We hope to better support the community by this switch to the open-core model. Please give us a thumb-up emoji if you think this is a good idea, or let us know how you think by leaving a comment below.

Metadata

Metadata

Assignees

No one assigned

    Labels

    CommunityCommunity related work and announcements

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions