DEV Community

Web Extensions
Web Extensions

Posted on

A distributed revenue sharing model for open source sponsorships

I have created a few open source projects based on JavaScript and CSS. In my case, the aim has never been to earn money through it. But, if we take the whole community into consideration, earning no money from open source projects limits its potential.

Recently, an ad-based revenue generation experiment was tried out and stopped (https://feross.org/funding-experiment-recap/). Though the execution faced a backlash from some of the stakeholders, most of the people were supportive of the idea behind the experiment.

This incidence made me convert an idea I have had in mind into an on-paper proof-of-concept for discussions.

I have shared a proposal for distributed revenue sharing model for open source contributions at: https://github.com/webextensions/distributed-open-source-contributions/blob/master/README.md

Here is the gist.

Problem statement

Open source developers spend a generous amount of time in developing and maintaining open source projects. But, the currently popular monetary compensation models are skewed in favor of only a few open source projects which are popular and being used directly by the sponsors. Due to this, the transitive dependencies of those open source projects are not able to attract enough monetary benefits.

Note: Some of these transitive dependencies may be detectable, for example, via package.json for Node.js projects. While some others may be getting used in background and hence they are not automatically detectable, for example, a tool like GIMP.

Proposed solution

Every open source project should be able to share a specific percentage of the sponsorship amount they receive, to the other open source projects.

Sample workflow

  • Let's consider that we have a Node.js based open-source project called awesome-contributions
  • A considerate company, which makes use of the awesome-contributions project, decides to sponsor that project with a contribution of 200 USD per week.
  • The team behind the awesome-contributions project has used many other open source projects, without which awesome-contributions couldn't have been built. That team wishes to share the contributions it receives with those open source projects (let's call them "transitive projects").
  • awesome-contributions project uses the following "Contribution sharing rules" on the platform which has implemented this proposal:
  {
      "contributionsShare": {
          // Out of all the sponsorship amount received via "GitHub Sponsors", this
          // percentage of the amount would be shared to other projects listed in
          // "shareContributionsWeightages". The remaining sponsorship amount would be
          // transferred to the accounts listed in the object "projectPartnersWeightages"
          "sharePercententageOfContributionsReceived": 50,

          // These "weightages" are just another way of representing share "percentages"
          "projectPartnersWeightages": {
              // Using "@" symbol to indicate that it is a project-partner account
              "@webextensions": 60,

              // "*" indicates remaining project-partners, who are not listed in the
              // object "projectPartnersWeightages"
              "*": 40
          },

          // These "weightages" are just another way of representing "percentages"
          "shareContributionsWeightages": {
              "eslint/eslint": 1,
              "facebook/react": 0.95,
              "GoogleChrome/puppeteer": 80,
              "jquery/jquery": 0.05,
              "webextensions/live-css-editor": 8,

              // "*" indicates remaining projects listed in "package.json"
              "*": 10
          }
      }
  }
  • This means, from those 200 USD, in a week:

    • 50% would go to the project-partners of awesome-contributions, i.e., 100 USD
    • 50% would go to the transitive project-partners for the transitive projects mentioned under shareContributionsWeightages, i.e., 100 USD
  • This effectively means, from those 200 USD, in a week:

    • eslint/eslint would get 1 USD
    • facebook/react would get 0.95 USD
    • GoogleChrome/puppeteer would get 80 USD
    • jquery/jquery would get 0.05 USD
    • webextensions/live-css-editor would get 8 USD
    • Other transitive projects would get, in total, 10 USD and those 10 USD would be equally distributed among them
    • @webextensions would get 60 USD in a week
    • Other project-partners would get, in total, 40 USD in a week and those 40 USD would be equally distributed among them
  • Other projects would also have their own "Contribution sharing rules" which would distribute the sponsorship amount even further.

More

This article represents the super-simplified version of the revenue sharing model which would auto-scale. More details and edge cases are handled in the detailed document.

Detailed document is available at: https://github.com/webextensions/distributed-open-source-contributions/blob/master/README.md

Comments are welcome here.
Issues and pull requests are welcome at the GitHub page of the document :-)

PS: While writing this article, I got to know about a recent announcement from NPM that they would be taking an initiative to make it easy to fund projects via their registry. I'm hoping that their solution blends with this model and later on extends to all open source projects, like described in this proposal.

Top comments (0)