hackmdio / codimd

CodiMD - Realtime collaborative markdown notes on all platforms.
https://hackmd.io/c/codimd-documentation
GNU Affero General Public License v3.0
9.1k stars 1.05k forks source link

Switching to the open-core model #1170

Closed jackycute closed 5 years ago

jackycute commented 5 years ago

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:

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

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.

davidmehren commented 5 years ago

I like this. Even though it's yet another change to the relationship of CodiMD and HackMD, a "standard" open-core model is way easier to explain to people.

Regarding the repo-structure: I understand there is going to be one HackMD-core repo. Is the current CodiMD repo going to be obsoleted? Will there be one repo for each plugin or one big monorepo for everything?

ccoenen commented 5 years ago

There's power in the choice of AGPL-v3. And while I understand the reasoning of choosing apache license from a business point of view, this is the point that's keeping me from jumping in joy right now.

I would also like to enquire how "the community activity has decreased" is measured?

kindfulkirby commented 5 years ago

There's power in the choice of AGPL-v3. And while I understand the reasoning of choosing apache license from a business point of view, this is the point that's keeping me from jumping in joy right now.

Won't CodiMD remain under AGPL, though? I'm not sure there is a downside to opening HackMD to an open-core model, but I might very well be missing something. (And I'm just a user, not a dev :wink: )

ccoenen commented 5 years ago

The currently available CodiMD codebase remains under AGPL, that's right. There's two things that worry me about this. First:

We will then refactor CodiMD and replace its core with the HackMD-core.

This would mean that this will be the end of CodiMD (AGPL) based on this repo under this organisation here. Of course, anyone is allowed to fork and use the code that's here right now. But it also sounds as if the HackMD team also intends to run the open core under the name "CodiMD".

This is a somewhat unprecedented step, and I believe this must be an error introduced in translation or something like that. All open core projects I know run under something like "MySQL Community Edition" or "Zimbra Collaboration Open Source" or "GitLab Community Edition". I believe replace to be a typo for two reasons: It would basically squash the existing development effort under AGPL but also dilute the HackMD brand. Basically everybody loses, and I don't think that's intentional.

So we come to the second thing that worries me: Let's assume we have HackMD-CE (Apache) and CodiMD (AGPL) from now on going forward. The licenses are incompatible[1] and prohibit any easy exchange of code. Basically, all work that's done on one can't (without extra work by the individual author) be applied to the other. While I would object to "decline in community", it is still a small community. And this community would surely split between those who keep using CodiMD (AGPL) and those who want HackMD-CE (Apache). So, in essence: CodiMD (AGPL) may well be at stake.

[1] Aside: the licenses: This is not a fault of either license, nor is it an accident. It is part of their different design goals. As stated before, AGPL gives a lot of power to the community and to its users. One of these powers is, that the code of your service can't be hidden from you. You as a user (any user! Not developer, not Admin. Any regular user!) is entitled to a copy of the source code. Apache is very different in that regard.

SISheogorath commented 5 years ago

Hello Community, hello HackMD team,

First of all I want to tackle the problem from a very practical perspective: AGPL is complicated, AGPL pushes free software, AGPL is great. When we have an Apache licensed core, and the CodiMD parts remain under AGPL, then the end result is still licensed under AGPL.

That's how it works and that's why we originally decided to use AGPL. This means that whenever you decide to keep any plugin under proprietary license, it becomes incompatible with all CodiMD plugins. In other words people either run a CodiMD-only version or HackMD re-implements all features in CodiMD. Effectively, it either destroys the purpose of this issue's idea or it makes CodiMD obsolete in general which makes the whole idea of opening an issue here, except for marketing purposes, pointless. Sorry for stating it that clear, but boils down to that, and I already pointed that out in the previous conversation we had, even when I wasn't that clear on this.

One of the reasons why I'm personally far from happy with this idea in general, besides the license issue, is that it literally throws away more than a year of work by the community in order to bring HackMD and CodiMD together with the intention to monetize the CodiMD community. Which is in a way pretty much against what you purposed in 2017 when you decided to let the community organize itself.

To be clear, no one wants to prevent you from making a living, but it should be done in a fair and reasonable way and this idea is basically "Let's change the license from AGPL to Apache" (of course by taking care of the problem, that AGPL in general doesn't let you do that, which is tackled by bringing a core component under a different license).

And you as HackMD team, as well as I, know that this idea didn't came from nowhere. It came up all of the sudden, when I asked you about your feelings about moving this repository along with other repositories to an own CodiMD organization, since the community is organizing itself anyway.

I would love to see more contributions from your side, but I understand that you have to focus on making a living with HackMD. What I don't understand is what hinders you on pushing your changes to CodiMD instead of an own core repository. Sure, things would be AGPL licensed, but since you are the copyright holder of your parts, it wouldn't matter when you run that parts as a proprietary product on HackMD.io. The only difference would be that you can't take the advantages of community contribution, but that again would allign with your commitment from 2017 about taking the communities fruits.

davidmehren commented 5 years ago

After my initial positive comment I thought about the other comments and AGPL in particular. I must say, I probably misunderstood the goal of this issue.

I have to concur with @SISheogorath and @ccoenen. You can't just take over a community project and throw all work that has been done out of the window.

I somewhat understand the "with AGPL we can't make money with proprietary addons" thing. But OwnCloud tried that and (at least I would call that) failed. Nextcloud explicitly does not use an open-core model but solely makes money by selling support around Nextcloud. Maybe something like that would work for you?

kindfulkirby commented 5 years ago

Ah dang, you're right, I missed the part about how they'd change everything but "CodiMD exclusive features" to be Apache licensed… I figured it would be dual-licensed and remain AGPL (or triple, I guess, if they want to sell some of it?)!

jackycute commented 5 years ago

OK, let me clarify this.

What we're proposing is to keep the CodiMD and all previous contributions' license "as-is" (AGPL). And we will extract the HackMD-core as a separate repo (licensed under Apache 2.0) from HackMD (EE) which will be refactored and open source. Then we will try to refactor CodiMD to use HackMD-core and make all features pluggable (all CodiMD's plugins will be licensed "as-is", AGPL).

I believe the licenses will be compatible in this way.

Also, we will keep maintaining HackMD-core, so that CodiMD can use up-to-date, enterprise level core and install or write any plugin that they love.

From above points, you can see that HackMD (EE) is the version that installed exclusive paid plugins (close source) that extends HackMD-core. And we hoping to open source those paid plugins one day and this proposal can make that possible when the time comes.

SISheogorath commented 5 years ago

@jackycute well, while it may is not intended, but at the end of the day it would mean that we would swap out large parts to the current code base in order to make it compatible with hackmd-core. And while our codebase is AGPL licensed the hackmd-core would be Apache licensed.

In other words, large parts of our codebase would change their license from AGPL to Apache. Maybe not with exact intend to do this, but at the end of the day, that's the result.

And yes, we could integrate an apache licensed core into CodiMD but the question is: What is left from CodiMD when we swap out the core? Looking at the features that were listed above that would be 5 JS files, let's be grateful and they we end up with 20 things that are CodiMD exclusive. This would basically destroy the foundation of the community around CodiMD, which has a strong relation towards free software, in order to move people towards HackMD-core which runs on a simple permissive license.

And to state it clear, nothing is preventing you from open sourcing features like book mode or user profiles. It just doesn't make a lot of sense, from a business perspective, which is probably the reason why it didn't happen, but it's also uncool to bring it up here like you couldn't do it otherwise.

pferreir commented 5 years ago

I think there is a choice here, between:

This is my personal opinion: as already discussed on Matrix, as a user and occasional contributor, I think there is already enough evidence that while Open Core does tend to work finance-wise (so, from the PoV of sustainability), it also alienates a great part of the FLOSS community and increases the likelihood that larger players will just try to crush you. Look at ElasticSearch and what is now going on with AWS. Or MongoDB.

But those who contribute the most should be the ones taking the decision (@SISheogorath in particular).

SISheogorath commented 5 years ago

Okay, maybe all this got a bit dramatized yesterday, sorry for that, but I wanted to make a hopefully reasonable point. Let's come down to a bare technical question:

@jackycute what do you expect that CodiMD repository will look like after the refactor?

jackycute commented 5 years ago

Thanks for all your feedback, they are well received. The fundamental reason we started the discussion of the open-core model was hinted in the issue above, but probably not as clear as it should be, or got overlooked. Let me try another take here: We think CodiMD deserves more love from the HackMD team. Now the question is how?

These are our constraints:

  1. We have to make a living as well. Our team size and team composition do not allow us to balance purely selling support and improving an open source HackMD at the same time.
  2. Maintaining two markedly different code base is just too much a burden for a startup of four developers, and it just feels duplicate and wrong.

Therefore, open-core model seemed like a great solution to us.

Yet, your sincere feedback forced us to come down to the very essence of our assumption. Is open-core model really the only way? AGPL does provide very good protection and assurance for the community, can we love CodiMD more while respecting that? Lastly, nobody likes the project they had worked on being hollowed-out (even it's replaced with a better version), we have to respect that as well.

So we think of another way:

  1. HackMD team will now, like where everything started, officially maintain CodiMD.
  2. CodiMD will still undergo a refactoring, but not as major. We will focus on making sure the API and database schema are in sync with HackMD, so we could minimize the effort maintaining two very different code bases. The ultimate goal here is to make porting features from HackMD easier.
  3. CodiMD will remian AGPL. Since the refactoring is just work we do on CodiMD and it doesn't share code with HackMD, the HackMD team could still keep our proprietary source closed and commercially licensed.

Hopefully this addresses most of your concerns that were valid. Let us know if you like this plan better by giving us a thumb-up emoji, or leave your comments below.

pferreir commented 5 years ago

@jackycute it's great that you have listened to the community's concerns and that you're considering taking the harder path to keep us all happy. Thanks!

At the same time, there's something that has never been very clear and is even less clear to me now: who owns CodiMD? Is it the Open Source sibling of HackMD? Is it a community project that HackMD happens to contribute to? That may seem like a detail, but it makes all the difference with regards to governance.

GitOnion commented 5 years ago

@pferreir Some historical facts:

  1. HackMD was a project @jackycute and the HackMD team developed and opened source under the license of MIT out of goodwill, so people can use it and contribute to it if they so please.
  2. The current HackMD service at https://hackmd.io/ was forked from the then open source HackMD repository, and the open source repository was renamed to HackMD(CE) and re-licensed from MIT to AGPL v3, when the team decided some requested features have commercial value that could sustain the team.
  3. HackMD(CE) was renamed to CodiMD, per suggestion of the community.

Legally speaking, what "CodiMD repository is open source under the license of AGPL v3" means is effectively:

  1. You could use CodiMD for free (as in both free beer and free speech), and you are assured that the source will aways stays open to you.
  2. If you want to contribute to this repository, know that you agreed your contribution will follow No. 1.

But AGPL v3 doesn't say its original contributors give up their copyright ownership, or even give up the right to decide under what license they want their source code open to their users. I don't think ANY widely used license does that. The individual contributors each own the copyright of the code they contributed. More than 90% of CodiMD's source code is contributed by the HackMD team (and 100% in the core components of real-time collaboration), and the HackMD team owns the copyright to those parts.

I hope this clears up your confusion.

pferreir commented 5 years ago

@GitOnion thanks for the details. That's not exactly what I meant however. By "ownership" I mean "who governs the project". It's clear to me that 90% of the copyright belongs to HackMD and no one is questioning that. It's also clear to me that @jackycute is the "spiritual leader" of the "HackMD family" if you want 😉 . He has non-executive authority over the direction the community takes, due to being the creator of the whole concept and someone that is thus respected.

A completely different question is "who owns the CodiMD project/repo and who has the right to decide what gets done and what doesn't?"

Example: I can fork this repository and make my own project ForkMD based on CodiMD. I can preserve both copyright attribution and the license. That doesn't make the project yours. You have the copyright over the greatest share of the code but, as long as I respect that and follow what the license stipulate, I don't have to get your consent on whatever I do with ForkMD. I can choose to implement whatever feature I want to.

The initial impression I had was that CodiMD was such an effort (the community took the HackMD code and decided to create a project they can govern themselves). Now I am getting the impression that HackMD has instead only delegated control over it to a group of developers. That's what confuses me.

By the way, I'm asking this very honestly - my contributions to CodiMD have been relatively small, but I would like to know for sure who will be judging the relevance of my PRs in future contributions and deciding the project's direction.

GitOnion commented 5 years ago

@pferreir

Quoting your own comments earlier:

But those who contribute the most should be the ones taking the decision (@SISheogorath in particular).

Now the factual error you made, that @jackycute, not @SISheogorath, contributed the most, should had been clarified in my earlier reply.

Combined with another of your own comment:

It's also clear to me that @jackycute is the "spiritual leader" of the "HackMD family" if you want 😉 . He has non-executive authority over the direction the community takes, due to being the creator of the whole concept and someone that is thus respected.

I think the answer to your question...

A completely different question is "who owns the CodiMD project/repo and who has the right to decide what gets done and what doesn't?"

...should be pretty clear already.


Now I don't see your point of the example of ForkMD. The last time I checked, CodiMD had been forked at least 500 times.

Example: I can fork this repository and make my own project ForkMD based on CodiMD. I can preserve both copyright attribution and the license. That doesn't make the project yours. You have the copyright over the greatest share of the code but, as long as I respect that and follow what the license stipulate, I don't have to get your consent on whatever I do with ForkMD. I can choose to implement whatever feature I want to.

With those 500 forks, I doubt you could find a single claim we made against the fork, or we had ever tried to stop people from implementing their own features. The spirit of open source is, like I said earlier:

You could use CodiMD for free (as in both free beer and free speech), and you are assured that the source will always stay open to you.


Now I want to say two things with regards to governance:

  1. Referring back to A note to our community we posted back in October 2017:

We promise not blocking any pull requests, even those with features similar to HackMD(EE). We would also continue patching vulnerabilities and fixing bugs. For the sake of consistency, we would rename the repository to HackMD(CE). We recently invited two most active community members, SISheogorath and ccoenen, to be the moderator of HackMD(CE) and be the community’s advocates. They will make sure we keep our promises to you.

@SISheogorath and @ccoenen were invited to be the moderator of the code base. Not governors, not administrators, and not directors. They were invited to speak for the community, and they did a fantastic job. This leads to my second point:

  1. If you had been following the development of this open-core model discussion, you could see that we took the voice of the community, especially @SISheogorath and @ccoenen, seriously. They warned us, for the benefit of the community, that we have to show more care to CodiMD. We responded with an idea, the open-core model. The community pushed back with valid concerns, then we adjust our plan accordingly. Now yes, it doesn't mean we obey whatever the community requests, but compared to your own idea that "those who contribute the most should be the ones taking the decision", I think we did a pretty good job incorporating the voice of everyone.
pierreozoux commented 5 years ago

(I'll use libre software in the rest of the text, as free software can be confusing, and we use AGPL, so it is clearly not an open source project)

@GitOnion sorry, but I think you don't fully understand the dynamics of a libre software project.

It looks like history is repeating again and again, a CTO (@jackycute I guess in this case) wants to work on a libre software project, and seek for capital to do so, and the CEO (and/or investors) (I don't know whom in this case) wants to cash out that without understanding what libre software is.

If you are interested, I can point you to this talk, from Nextcloud, where the CTO forked its own company. If you are interested in this topic, it happened exactly the same with piwik/matomo (it was less public), and cozycloud (the story is sader as the CTO just got kicked out of the company, and there was no strong will to fork).

<digression> I need to digress a bit to evaluate the power structure of this project. I think we have 4 kind of organisations possible depending on the power structure:

I think that in the libre software movement, it is usually worker owned. Meaning that the one contributing the code is usually the enlightened dictator of the project. In this case, @jackycute was the first dictator, and since the fork, @SISheogorath is the one. (I'm not saying it is good or bad, just trying to describe the situation without judging, even though you could argue that the careful choice of words is not neutral).

hackmd.io is not clear to me if it is worker owned, or investors owned, I think it is the later (at least, it looks like a traditional startup, and as such, I don't think it is a worker cooperative, with eqqual voting rights, but tell me if I'm wrong).

Then, we have the users, I'm in this group. In the libre software movement, users are usually a bit more than just proprietary software users. For each user the degree will vary, but we are all a bit users, and also "workers". a substancial part of users are also contributing, but in a more diffuse way than the "dicator". These work are:

I'm not saying that the users are doing the same amount of work as @SISheogorath I think he is doing 99% of the work. But yet the community is also doing some work. And usually, libre software community fail to distribute power accordingly. We usually say it is a doocracy, but in fact, it is who is writing code that has power. (again, not saying it is good or bad).

</digression>

Going back to our discussion: First, I'm really happy if CodiMD stays CodiMD and AGPL and @jackycute comes back to contribute to the project, I think nobody could say it is a bad news.

But, I have to admit, I'd like to understand the reasons behind this move, I think I'll never get the real ones, and if HackMD.io could try to be fully transparent here, it would be awesome. At the end, as I already said, it is all a matter to manage expectations.

So why HackMD.io wants to get back CodiMD? I could think of the following reasons:

I hope you can be transparent on the real reasons behind (and it can be what you already said). But I think investors are a bit behind this decision, and @jackycute you didn't explain them at all. And I'll say it one more time, I hope you make money and a good living with this project, but I just want to make sure that this freedom doesn't limit my freedom as a user.

So to sum up, I'm happy if it keeps the same name, if @SISheogorath keeps owner (if he has it, if not, he should get it) rights to this repo, and this stays AGPL. But this is the voice, of one user among many, that is not contributing at all the same amount of work as @SISheogorath so I guess, I'm fine with what his decision will be :)

HerHde commented 5 years ago

And I'll say it one more time, I hope you make money and a good living with this project, but I just want to make sure that this freedom doesn't limit my freedom as a user.

:clap: Indeed.

I would still love to see the projects united as libre software with opportunities to give money which does not involve paying for closed source software, but It is only possible when you take the very risky path to completely release the software under AGPL and focus on hosting, support etc.. With four devs on the payroll it is not easy, this, crowdfunding, donations etc would most likely not be enough.

I see HackMD's dilemma and I guess to understand the motivations, but as a user I ask you to be considerate and please not ruin the project OR community, as It would be a loss to everybody, including HackMD.

pferreir commented 5 years ago

@GitOnion I think you didn't fully understand my example. Of course the project has been forked (I have done that myself, in order to contribute PRs), but as far as I know, no other fork is being advertised as a usable project. And it's obvious that you didn't take any actions to keep people from doing anything with their own forks (you wouldn't be able to anyway). That's not what I meant, I was just trying to clarify what is the distinction between Copyright ownership and Project governance.

Anyway, I think that the last part of your message perfectly answers my question: it's clear to me now that, in your PoV, this is a project that is still managed by HackMD. As I said, that's not the impression I had before but it's good that we've finally managed to clarify that. Thanks!

SISheogorath commented 5 years ago

@GitOnion I'm not really sure if I ever understood myself in the position of a "moderator", at least not on behalf of HackMD. And even when I did, I definitely grew out of that.

Back when we started CodiMD or HackMD CE, it was an abandoned repository. You and @jackycute decided to go for HackMD as a service which all of us respected. We asked you, the HackMD team, if we can continue your Open Sourced work without losing all the community that was around back then and you seemed fine with that. We would continue the repository, work with the community and you could work on your parts without being in each other's way.

And so we worked on all this for more than a year now. We grew a quite big community since then. More than a 100 people registered in the community chat and at least the half of it actively reading messages including the ones from the past few days. This was not around when you decided to leave the community by itself. We started projects like the CodiMD-CLI which shows how the community is organizing itself. And we gave ourselves a new name. CodiMD.

And while I think that the "HackMD-CE" time was very close to HackMD.io. With the name change the community decided to take its own path. That's also the reason why I asked for moving this repository into an own organization. More than a year after the community picked up the abandoned work, it tries to fully organize itself. At least, that's what I experienced here and with the people around in our community channel.


But let's talk a bit about me, and how I see my position in the community and the project. Am I a great developer? Definitely not. CodiMD has a lot more potential and we see parts of that happening in HackMD. And it seems like I'm not able to push it that much as the HackMD team can do, starting from the same origin. So what is my position? A moderator? I don't think so either. I'm not telling who has the right to talk and who has not. I'm a community coordinator and gatekeeper. I try to enable the community to make useful contributions and express their ideas. At the same time, I make sure that the project has at least a rough direction. And of course, I try to grow the community, which is a lot more important to me, than any shiny feature.

And that's why I really welcome the push of the HackMD team to help with CodiMD, but I'm not willing to sacrifice the project's spirit to get features. I expressed that in my previous statement and I want to say that again.

I know you are great people and I really look forward to work with you again, but I'm sorry to say it that simple: It's no longer "your project". And it's not mine. The community owns and governs it. And all I do here is enabling the community to do so.

GitOnion commented 5 years ago

@pierreozoux Thanks for your crash course on the libre software movement, it helped me to come to understand the fundamental difference between your point of view and ours.

Before I go any further, I want you to be assured, as implied in @jackycute's last reply:

  1. CodiMD will keep its name as CodiMD.
  2. CodiMD stays AGPL v3.
  3. Your freedom as a user will not be limited in anyway.

We agree that the community "owns" CodiMD (in terms of project governance, not copypright).

Now, the difference in our views, and the key question for you (@pierreozoux, @HerHde, @pferreir, and @SISheogorath)to think about is: Is HackMD team part of the community?

We at the HackMD team think Yes, we are members of the community. Reasons being:

  1. The entire project and community were started by us.
  2. We are the majority contributor.
  3. We keep patching the code base, attending community calls (which I don't think we often see @pferreir, @pierreozoux, or @HerHde), and sponsoring the CodiMD stickers. These acts make us among the most active member of the community.

If you think: No, the HackMD team is not a member of the community, then it begs the question: Why not? What criteria does the community judge who is part of the community and who is not? Is the funded status one of the criteria? How do you define funded status? If you are on the payroll of some other software company, are you funded? If your employment agreement with the other software company includes assignment of intellectual property like copyright, could you still be a member of the community? Would your contribution to the project be claimed owned by that company some time down the line and jeopardize the community autonomy? Or should we do a legal background check before we allow anyone to contribute to the code? Or maybe, those hired by any company can still contribute but because they are "commercially polluted", they aren't worthy of being part of the community?

For the record: we are not funded with external capital, so there are no investors behind this discussion, which should be pretty apparent with our short-handed situation I mentioned. (This also gets me wondering, @pierreozoux why does investor backing disqualifies the company being a community member? You seemed to implied that. Feel free to ignore this if that wasn't your intention. Note that this is a free AGPL software, free as in free speech, means you could do anything you want with the code base, including commercialization, as long as you keep the source open.)


If we both agree that the HackMD team is an essential member of this community (If not, I'm happy to learn why you disagree), then the next question is: how is this community governed?

Like I said in my earlier reply, and re-iterated: the three reasons combined (1. The entire project and community were started by us, 2. We are the majority contributor, and 3. We are among the most active members of the community.) made us not just any member of the community, but at the core of the community and its rightful governor since the project inception til today. To which, You guys seemed to agree:

@pferreir It's also clear to me that @jackycute is the "spiritual leader" of the "HackMD family" if you want 😉 . He has non-executive authority over the direction the community takes, due to being the creator of the whole concept and someone that is thus respected.

@pierreozoux the libre software movement, it is usually worker owned. Meaning that the one contributing the code is usually the enlightened dictator of the project.

Now here is another fact I think some people were misled by @SISheogorath (arguably not intentionally, but the misinformation appears to be in effect): We the HackMD team did NOT abandon the project after the fork.

If you refer back to A note to our community we posted back in October 2017, in the very first paragraph we said:

We also promise ongoing free hosting of HackMD.io and commit to continuous support of the HackMD Community Edition (CE).

In the same spirit, the third paragraph:

We are committed to keep making HackMD the best tool for knowledge management and collaboration with Markdown syntax. To make this effort sustainable, we will soon be offering HackMD(EE).

In other words: the offering of HackMD(EE) was actually intented for making sustainable our commitment of making HackMD(CE, now CodiMD) the best tool for knowledge management and collaboration with Markdown syntax. We might be occupied working on HackMD(EE) from time to time, but the fact that we keep patching the code base, attending community calls, and sponsoring the CodiMD stickers is the antithesis of "we abandoned the project".

If we never abandoned the project and you agree @jackycute is the first dictator, then you could not find when that dictatorship was handed over. The fork of the HackMD(EE) follows the spirit of free software (free as in free speech, a.k.a. anyone could do anything they want). Therefore, as long as we keep contibuting to the project and follow the AGPL license, no one had the power to demote @jackycute's dictatorship, until he is no longer "the one contributing the (most) code" in @pierreozoux's own word.

This very thread shows clear and transparent governance of the HackMD team over the community. The community raise an issue, we respond. You raise a concern in our response, we adjust accordingly. We will keep convincing the community at large until we all agree.

In what I see thus far, the community seems to not object the proposal @jackycute made here, and thus we shall go ahead.


What the community doesn't agree seems to be the governance model.

Now I will take a step back to answer the "why" question @pierreozoux raised: Why does HackMD want to get back CodiMD?

First thing first, the HackMD team is not "getting back" to where we already are. We proposed a new architecture (the open-core model) as the governor, and we ended up agreeing to a refactor, incorporating the community's voice.

So, why now? This entire discussion started three weeks ago when @SISheogorath told @jackycute he wants to transfer the code base into another organization. Logically, this doesn't sound right because: 1. The entire project and community were started by us, 2. We are the majority contributor, 3. We are among the most active members of the community and 4. We are the governor since the project inception til today. Emotionally it sounded like plain stealing (why could anyone take over the repository in which we poured in years of work?) Yet, with our commitment to continuous support of the HackMD community, we asked him for the motivation behind this move, and the reasons boiled down to these three:

  1. "I want to be able to install some GitHub apps."
  2. "People are confused about the fact that two different names are under the same organization," and
  3. "The governance model doesn't reflect the current situation".

We assured @SISheogorath if he wants any GitHub apps installed, we can help. To solve the confusion of the names problem, we decided to go for the open-core model. The model seemed could solve the problem, and we remember some community members had asked for it. The open-core model proposal had been adjusted, and the discussion had concluded here.

Now this finally leads to the key question here: "Does the governance model reflect the current situation?" I would argue Yes it does. I will explain why so with in-line replies to @SISheogorath:

We grew a quite big community since then. More than a 100 people registered in the community chat and at least the half of it actively reading messages including the ones from the past few days. This was not around when you decided to leave the community by itself.

  1. We never left the community, like I pointed out in the first part: We started the community even before you joined. We keep our presence. People come and go, but one thing will not change: we will keep being the core part supporting the community even after people today commenting in this issue parted.
  2. With regards to the "100 people registered in the community chat", do you think they registered merely because that channel exists, or because they first see HackMD.io and think it is a pretty cool tool and then they searched for an open source version, then they find the channel? Please don't take all the credits.

We started projects like the CodiMD-CLI which shows how the community is organizing itself.

The community is always self-organizing, since the inception of the project, which @jackycute self-organized. I think you meant to say, "the community could self-organize without the HackMD team"? Sure it could, but it doesn't mean HackMD team is not part of the community or demeans @jackycute's dictatorship. Let me re-iterate this again: 1. CodiMD is a free software, free as in free speech, anyone could do anything. 2. We as the governor did not and will not limit what you as a user, (or the community) wants to do.

And we gave ourselves a new name. CodiMD.

Did the non-HackMD team community come up with the name? Yes. Did the HackMD team approved the name change as the governor? Also yes. I remember clearly the call in which you proposed the name change, in which you told us you already registered the domain name codimd.org yourself, and my feeling of being ambushed. My feeling aside, you could argue that this is the community self-organizing. Yet this initiative doesn't mean our governance model isn't working. We liked the name HackMD(CE) and we think CodiMD sounds pretty nice as well, so we agreed to the name change.

And while I think that the "HackMD-CE" time was very close to HackMD.io. With the name change the community decided to take its own path. That's also the reason why I asked for moving this repository into an own organization. More than a year after the community picked up the abandoned work, it tries to fully organize itself. At least, that's what I experienced here and with the people around in our community channel.

Again, we didn't abandon our own work, we invited you to join the organization as an editor moderating the project because you were almost as passionate about the project as we are. The way I see it though, your claims here is only true as far as to "the non-HackMD team community wants to organize itself without the HackMD team." Your motive to self-promote to be the governor doesn't justify itself in our view, both logically and emotionally, as explained above. CodiMD is a free software, free as in free speech, anyone could do anything to it after it's been forked. However, we as the governor of this community under the HackMD organization, are not convinced that our current governance has problem that demands us to hand over the governorship.

But let's talk a bit about me, and how I see my position in the community and the project. Am I a great developer? Definitely not. CodiMD has a lot more potential and we see parts of that happening in HackMD. And it seems like I'm not able to push it that much as the HackMD team can do, starting from the same origin.

Now, we can argue the governance model all day long, but when the dust settles, CodiMD is an open source software project. If you cannot drive the project forward, please don't alienate the HackMD team that could, for the sake of our user community.

So what is my position? A moderator? I don't think so either. I'm not telling who has the right to talk and who has not. I'm a community coordinator and gatekeeper. I try to enable the community to make useful contributions and express their ideas. At the same time, I make sure that the project has at least a rough direction. And of course, I try to grow the community, which is a lot more important to me, than any shiny feature.

For the record, we think you did a great job in some of the above. We were very grateful for your contribution. Yet, we don't think it requires the code base being transferred into another organization for anyone to further achieve any of those goals. I doubt you could find one incidence we as the governor shut people's right to talk or block the community expressing their ideas.

And that's why I really welcome the push of the HackMD team to help with CodiMD, but I'm not willing to sacrifice the project's spirit to get features. I expressed that in my previous statement and I want to say that again.

Can you be more specific about exactly what spirit would be sacrificed by we pushing features? If self-organization is what you meant, please see my discussion about self-organization above. Please also be assured what we insisted since Oct. 2017 will continue to stay: We promise not blocking any pull requests, even those with features similar to HackMD(EE).

I know you are great people and I really look forward to work with you again, but I'm sorry to say it that simple: It's no longer "your project". And it's not mine. The community owns and governs it. And all I do here is enabling the community to do so.

We think you are a great person and really look forward to continue working with you as well. Copyright wise, 90%+ of the project is still "our project". Governance wise, we agree the community, which we are part of and are the governor of, as explained, owns and governs the project. If you don't think we are part of or not the rightful governor of it, please justify. Otherwise, the community already owns and governs CodiMD without the needs of transferring the project out.

SISheogorath commented 5 years ago

@GitOnion @jackycute I think we run into a big misunderstanding here, which in parts, of course, is also my fault.

First of all, I want to make clear, that I didn't want to steal anything, but making a smooth transition. We have tons of issues here, people who want to keep up with the project and so on and so forth. Due to the way how GitHub is organized, it would be the most comfortable way for all community members, given that we would decide to move to an own organization, when the repository was moved instead of everyone re-subscribing to a new repository. Otherwise we would have simply forked it. I reached out to you with the intent to make sure that you don't feel like I or anyone wants to "steal your repository".

And of course is the HackMD team part of the community. But there is definitely a conflict of interest here, as you run a proprietary product based on the same original source code in order to make your living. And this fact is exactly why I don't consider you as governors of the community.

Since I want to keep this one short as I don't see a point in throwing books at each other, the reason why I'm concerned about the "spirit of the project" is this line:

HackMD team will now, like where everything started, officially maintain CodiMD.

This sounds like the decision has been made. Maybe just bad wording, but it sounds like a set decision. No one wants to prevent you from providing new features. It's just that the mentioned conflict of interest, the original proposal, the maybe bad wording statement and the fact that you have full access to the repository makes it questionable (probably less for me, but more for others) how much the community members' interests will be part of the future CodiMD versions. I think it's just that a lot of people in the community want to make sure that CodiMD survives as a community project, no matter what business decisions HackMD makes.

ccoenen commented 5 years ago

(this might come across as ungrateful and for that I am sorry. I really really am grateful for HackMD / CodiMD, but I also think that perspectives have grown apart over the past two years.)

To me, @SISheogorath has clearly been leading the CodiMD community for at least the past year. He provided countless hours of support to the community. He managed all the releases in that period. I do not deny that @jackycute is part of the community and I certainly didn't forget that all of it started with HackMD, but if you ask when the leadership over the community effort tranferred: pretty much a year and a half ago. If you take contributions over the past two years, this becomes very obvious:

24 months of codimd development

The HackMD team chose to be not as involved for a time. Nobody blames anyone, personally I thought this made perfect sense with all the progress HackMD.io has made in the time.

If you were to focus on just the most recent 12 month period, it's not even close anymore. More than @SISheogorath's number of commits (which is easily 75% of all commits in that time range) I value the steady continuous involvement. The project never felt abandoned.

12 months of codimd development

We don't have any stats over other involvement, and code certainly isn't everything in such a project. Still: when it comes to other involvement, from my perspective it wouldn't look much different.

So, from my perspective it also felt like growing apart. Taking the step to make the two different pieces into different organisations made (and makes) sense to me. I don't believe, CodiMD is a competitor to HackMD; I also don't believe that HackMD is a competitor to CodiMD. They each are different enough that there's room for both. Each serves something that the other can't.

SISheogorath commented 5 years ago

Just as clarification what I meant by abandoned was the period of time in Summer and Fall 2017 where the repository was dead enough that community members were wondering if it would ever come back to life: https://github.com/hackmdio/codimd/issues/531

pferreir commented 5 years ago

We keep patching the code base, attending community calls (which I don't think we often see @pferreir, @pierreozoux, or @HerHde)

@GitOnion I'm not sure what you are trying to imply here, but I was pretty clear in saying that my participation has been modest and that others would be more qualified to speak. I only asked for clarification on something which I find important, which is the ownership of the project.

But, BTW, my participation still amounted to 2 PRs (one of them quite important: generic OAuth support). I did try to attend the community call on one occasion, but it was postponed for lack of participation. I'm not sure if that fulfils you community participation criteria, but I do think I have the right to say one thing or two 😉.

GitOnion commented 5 years ago

@SISheogorath,

It doesn't matter how you phrase it, taking over something other people own is never a good behavior.

Due to the way how GitHub is organized, it would be the most comfortable way for all community members, given that we would decide to move to an own organization, when the repository was moved instead of everyone re-subscribing to a new repository. Otherwise we would have simply forked it. I reached out to you with the intent to make sure that you don't feel like I or anyone wants to "steal your repository".

Three things:

  1. If people aren't even willing to "bother" re-subscribing to a newly forked repository (as simple as just clicking some buttons), then our current governance probably is NOT bothersome enough that you have to move to an own organization.

  2. How do you know (and would prove) that "all" community members are willing to move to another organization? There are close to 150 watches, 4,600 stars, and 600 forks. Does EVERYONE, or even half of them, knowing HackMD team is where it started and has better supports, want to move with you? Also note that these numbers are the "real" user community we serve, not just people leaving echo chamber comments above.

  3. Now that I've made it clear that the community already has what it asks for (clear ownership), if you still decide to fork the code base and tell the community to go "exodus" with you, it's still your freedom that I cannot and would not limit.

But there is definitely a conflict of interest here, as you run a proprietary product based on the same original source code in order to make your living. And this fact is exactly why I don't consider you as governors of the community.

It's interesting that you argue that running a proprietary product based on the same original source code in order to make our living dis-qualifies us to be the governors. This is a common practice: Docker, Elastic, GitLabs, to name a few, runs the same model. There will always be fundamentalists complaining about their governance, but in my opinion, these projects have pretty good communities.

@ccoenen,

This is a software project, code is certainly a major part of it. At the end of the day, a software project is consisted of lines of code. I will one last time point to the fact that the majority of code is contributed by the HackMD team. If you think the work @SISheogorath done over the past and a half years is significant, then when you look at how his code contribution compares to that of the HackMD team, how can you not see how valuable is the HackMD team?

I really don't see why moving the project out from our organization would be a great move for the community. Indeed, the HackMD team was short in time when #531 came out, and we really really are grateful for @SISheogorath's contribution to make the community thrive, but this never have to be an either-or problem for any of us in this community to choose from. If the project stays, the community gets BOTH.

@pferreir

My point was only to show that the HackMD team is every bit as much, if not more, a community member as you are. Which, in you previous comments, you seemed to believe otherwise. If HackMD team is part of the community, then this project is already community-governed, as many of you wanted, that's the whole point I wanted to make.

But, BTW, my participation still amounted to 2 PRs (one of them quite important: generic OAuth support). I did try to attend the community call on one occasion, but it was postponed for lack of participation. I'm not sure if that fulfils you community participation criteria, but I do think I have the right to say one thing or two 😉.

And for your PRs, we are very grateful as well. Everyone in this community is encouraged to say things they feel important, and the community will try to accommodate those if it feels those are important as well. That is the spirit we had when we open source HackMD, the spirit we have today as we discuss our perspective here openly, and the spirit the community can be assured that we will continue to hold in the future.

ccoenen commented 5 years ago

@GitOnion I'll give this a couple of days to think about this.

jackycute commented 5 years ago

Hi guys, thanks for all your responses and discussion. I think those might be gone too far of what we’re proposing and also off the intention. There is no point to go further with this thread, let’s stop right here.

Thanks @GitOnion for such detailed and great explanation. Thanks @pferreir for bringing up questions about the governance.

Thanks @SISheogorath and @ccoenen for their hard work and dedication for the community, I’ve been very grateful to yours contributions on both codebase and making a live community.

First, our intention was just trying to find a proper solution to maintain contribution from HackMD to CodiMD. That isn’t easy since we don’t have the resources to maintain two codebases. We thought there is one possibility (and people told us so) is open core model. But we didn’t know it might still have other issues. Nevertheless, the comments on the Riot and here told us their concerns and we learn those now. I think I understand the need to keep all the software freedoms (refer to https://sfosc.org), and license under AGPL will help this go on.

Second, the reason why we open source HackMD is to share the technology we made and let people to spread their creativity with this. And we can devoted our self on the enterprise needs then up sale those users. But that wasn’t the intention why @SISheogorath and @ccoenen wanted to help us to maintain the community and I misunderstood that back then.

Thus, I believe the current community consists of at least two different users and here is my desicion. For the people who want to use the latest feature and knowing there is a company behind this project, you can stay here. For the people who want to keep the code all away from business, I think @SISheogorath and @ccoenen will fork a new home for you.

I felt sorry about not making this very clear before and I’ve learned a lot from the community (from you!). Thank you all for reading this and thanks for your time and contribution, sincerely.

P.S. Please do leave a comment if you feel something unclear, I will answer you as much as I can.

Happy hacking!

ccoenen commented 5 years ago

To be clear: I did (and will continue to) suggest HackMD.io to people that are looking for a hosted, professional offering. While I can't know if any of these suggestions resulted in revenue to you, I really wish the HackMD business all the best and a solid, steady, good flow of income.

jackycute commented 5 years ago

Thank you @ccoenen

HerHde commented 5 years ago

Wow, that escalated quickly. So is it seriously a fork at @codimd then, @SISheogorath?

ccoenen commented 5 years ago

If you've been using CodiMD so far, this move will probably not make much of a difference to you. Stars start at zero. Issue tracker is empty. Other than that, it's the same project.

I think it's a technicality if you think of it as another fork or not, but from a practical point of view there's still an Enterprise Project (HackMD EE) and a community project (CodiMD). Those were seperated over a year ago and both did fine in my opinion. Both will most likely continue to do fine.

HerHde commented 5 years ago

Issue tracker is empty

That's it. But what will happen to this repo then? Will it be renamed to HackMD CE? Will the HackMD team maintain none, this or contribute to both? With the current core? It's always somewhat sad to see projects splitting up, but I guess for many parents it's also hard to see the children leaving the nest, to bring up a metaphor here.

jackycute commented 5 years ago

This repo will be maintained by HackMD team afterward.

We will say more about our future plan soon.

SISheogorath commented 5 years ago

A vision for CodiMD

Here we are! CodiMD is running in an own organization. Hard forking is usually the last resort for an open source project, but we felt that it was neccessary for continued development and the future of CodiMD. If you wish to read up on the final debate that lead to this, please refer to the old bug tracker.

It's time to stand together and find our way through the jungle. In some regards, we are back to zero, and that's sad. But on the bright side, the issue tracker has a lot room for your problems! :tada:

Let's work together!

The new GitHub organization provides us with all the flexibility we need to work on our own terms. We already sent out invitations to various community project participants and will welcome people to join us.

You might wonder about the next steps. We currently rebuild the infrastructure parts that were in the hands of HackMD, like the container repository, and work on integrating services with our new home, which was previously more difficult.

With this done, we look towards a very interesting future:

One of the first actions we'll take is providing a fully documented and working API for CodiMD, which should allow you to import, export, create, delete and even modify your notes. You are welcome to participate in the debate about the API design.

APIs are great, but your eyes deserve some love, too: So we also started working on some UI/UX improvements. User Profiles will be continued and completed over here.

Finally, we also want to work on improving the connections and collaboration within the community. Our community forum should be up in a few days.

I'm looking forward to your ideas, inspiration and comments. Let everyone know, that CodiMD is not dead, it's reborn!

wolftune commented 4 years ago

Interesting to encounter this history after-the-fact. I only just learned of CodiMD.

I wanted to clarify a misunderstanding I read above:

@pierreozoux wrote:

we use AGPL, so it is clearly not an open source project

This statement shows a fundamental misunderstanding. AGPL is absolutely an Open Source license, period. AGPL is an approved license at https://opensource.org/licenses/alphabetical as are all the FSF/GNU licenses. Open Source does not mean non-copyleft. https://opensource.org/faq#copyleft

The issues with libre software are about giving freedom to users. Certain norms about project governance may be common, but all that matters is that users have full freedom, whether or not they ever do anything to help the project. That is the philosophical difference. Open Source focuses on how the project enables collaboration. Free/libre focuses on spreading freedom, not locking end users into restrictive terms. Both movements support nearly the identical list of licenses though.

zeigerpuppy commented 4 years ago

Just weighing in a little here. I am a user and service provider who hosts a codimd server that is fully integrated with Gitlab SSO and Mattermost. I got interested in the project around the time that the community was making a decision to change the name of the project so that it was different from HackMD.

My understanding when this name changed occurred was that the project was taking an explicitly open source position, to differentiate it form the commercial project. That is really important for some users (including me). We certainly don't forsake companies making money from code, but once it's under AGPL, it's also a greater resource and can develop into tools and use cases that the original developer may not have imagined (or sanctioned!).

I don't think there was ever the expectation that the HackMD team would maintain the code going forward, we're already greatful enough for their decision to open source the code. It's also important for the HackMD team to realise that it's not possible (nor, would I argue, ethical), to then attempt to close the code by taking over the core with a different license.

There are great gains to be made by working together, but sometimes the motivations diverge. As I see it, one of the core aims of open-source software is to protect the future of the code from such changes in motivation, financially driven or otherwise.

I do hope that its possible to work together in the future and, as a humble user (and occasional bug tester) wish the communities the best for the future and humbly thank the programmers for their contributions.