Openfare - Monetize software with one commit.

Related tags

Utilities openfare
Overview

OpenFare

🪙 Monetize software with one commit. 🪙

Matrix

OpenFare monetizes any software library with one code change.

The goal: fund the next million software content creators.

The system:

  • payment plans defined in code
  • the OpenFare license
  • a tool for managing payment obligations across thousands of software dependencies.

The OpenFare License is a lot like the MIT License. The code can be modified, forked, reproduced, executed, and compiled without restriction by anyone. With two exceptions:

  1. Commercial users are subject to payment plans defined in code.
  2. The license and payment plans can only be modified by the license copyright holder.

Simple setup for developers. And payment management across thousands of software dependencies for commercial users.

Join the chat room to discuss further.

Payment Plans Defined in Code

The OPENFARE.json file defines commercial payment plans for a software package. It is always located next to the project OpenFare LICENSE file (usually in the top level directory).

The following example describes two payment plans. One plan is applicable for organizations with more than 100 developers, and the other for those with less. In the former case, a one off payment of 50 USD must be made via Stripe. In the latter case, two payments must be made every 30 days using the Lightning Network, one to Contributor A and the other to Contributor B.

{
    "plans": [
        {
            "conditions": {
                "developers_count": ">=100"
            },
            "payments": [
                {
                    "method": {
                        "name": "stripe",
                        "public_key": "pk_live_thn8fkM3p7jV25rj5HwkRVJq",
                        "url": "https://api.stripe.com"
                    },
                    "recipient": {
                        "name": "Company LLC.",
                        "address": "12, Yellow Brick Road, UK"
                    },
                    "price": "50 USD"
                }
            ],
            "frequency": "once"
        },
        {
            "conditions": {
                "developers_count": "<100"
            },
            "payments": [
                {
                    "method": {
                        "name": "btc_lightning_keysend",
                        "address": "02788242941915ed5a101511b8dfeb6db81e0fcd7546f6a55ef4dedf590a7d7ff4"
                    },
                    "recipient": {
                        "name": "Contributor A",
                        "address": null
                    },
                    "price": "0.0002 BTC"
                },
                {
                    "method": {
                        "name": "btc_lightning_keysend",
                        "address": "03446242941915ed5a101511b8dfeb6db81e0fcd7546f6a55ef4dedf590a7p8kk2"
                    },
                    "recipient": {
                        "name": "Contributor B",
                        "address": null
                    },
                    "price": "0.0001 BTC"
                }
            ],
            "frequency": "30 days"
        }
    ]
}

Motivation

Filippo Tweet

The public software ecosystem has a maintenance problem. Thousands of critical software dependencies are maintained on the good will of casual volunteers. This fragile state means that critical software is abandoned or maintained with a passing interest. A security and stability nightmare.

Sponsorship and donation schemes have largely failed. They are not game theoretically viable strategies for addressing the problem. The solution is micro-payment compensation at scale.

I've written a Hackernoon article on this topic here: Funding the Next Million Public Software Contributors.

Concerns

Can't project maintainers just setup a website with payment plans and customer accounts?

OpenFare defines payment plans in code whilst avoiding the unnecessary overhead of customer accounts or a website. A commercial entity can make use of thousands of software packages. OpenFare standardizes payment plan information across software packages such that it can be managed programmatically at large scales.

What if commercial users neglect to pay? Who will stand up for the project maintainers?

Software developers who work for commercial entities want to pay for well maintained source available software. They understand that the situation is precarious because open source developers largely go unpaid. They also can't easily justify donations or charitable sponsorship when they work at for-profit companies.

What obligation do maintainers have to the project after being payed?

They have no obligation. A maintainer could receive payment and not work further on the project. But the popularity of the project and the associated payment plans would be public information. Competing projects where maintainers are willing to work for the same payments would win out.

What happens if a project uses several versions of the same software package?

For a given software package, only the payment plans given in the latest in use version is considered.

Comments
  • Document and version lockfile fields semantics

    Document and version lockfile fields semantics

    Currently it looks like the OPENFARE.lock fields are basically defined by the rust structs in the codebase and (de-)serialized using serde. While this makes initial implementation fast, it would be good consider the long-term usage of this file. Specifically, different repositories will have OPENFARE.lock files generated by different versions of the tool that will be long-lived (i.e. may not be updated for years/decades). Developers may wish to use other third-party tools to generate and process the files. As such, it would be good to:

    1. Ensure the file format is versioned, so as to allow forwards- and backwards-compatibility. That is, old versions of the openfare binary should gracefully detect and fail when attempting to read OPENFARE.lock files which were generated by future versions of openfare binaries. And they should gracefully handle older versions of OPENFARE.lock files that were generated by older versions, ideally without bumping up the version number.
    2. Document the allowed fields in the file and their meanings.

    Additionally as discussed in the matrix chat, it would be good use a file format that allowed for in-file comments as well (hjson was mentioned, although after looking at I'm not such a big fan of it).

    Basically this issue amounts to "standardize the OPENFARE.lock file format" to the point where there can exist independent tools that can operate on it.

    opened by staktrace 9
  • Add lockfile json schema, validation, unit tests, and an incomplete integration test

    Add lockfile json schema, validation, unit tests, and an incomplete integration test

    Some initial steps for lockfile validation.

    Remaining to do after this:

    • More validation checks
    • Get the integration test passing, and add more of them
    opened by willhansen 4
  • Pros and cons of various payment methods

    Pros and cons of various payment methods

    There aren't a lot of payment methods that support the use case targeted by OpenFare (small payments split hundreds to thousands of ways). I'm thinking this would be a good place to discuss which ones are viable to implement and use.

    • Paypal
      • Pros:
        • Familiar to many users
        • Commonly supported
      • Cons:
        • Transaction fees have a percentage and fixed part.
          • The fixed part adds up quick with many contributors. 0.30$ * 1000 contributors = 300$
        • Known to freeze accounts sometimes (especially with proximity to cryptocurrencies)
        • Batch payments require a business account
    • Bitcoin lightning network
      • Pros:
        • Low transaction fees
        • Fast
      • Cons:
        • Requires a bitcoin transaction to get currency on and off the lightning network (expensive and slow)
        • The technology is not even ready yet? (lnpay?)
    • Other crypto-currencies
      • Pros:
        • More established than the lightning network
        • Low fees and delays (depending on which currency)
      • Cons:
        • Extremely volatile coin values.
          • Makes listing prices in coins non-viable.
          • Fetching current coin-to-USD value at time of payment could lead to payers attempting to time the market?
        • Onboarding and offboarding money must go through crypto-currency exchanges
        • How to handle a lock file payment method for a currency that no longer exists?
          • (Only applicable for unmaintained code)
          • Impossible to pay, so the associated code can only be re-written?
          • Have a more reliable secondary payment method listed (like paypal, or mailing a cheque) just in case?
    opened by willhansen 1
  • Define a minimum supported rust version

    Define a minimum supported rust version

    It's usually good practice to define a minimum supported rust version for rust projects. Even if it's "whatever the latest rust release is", it would be good to make that explicit. I had rust 1.57.0 on my machine but it doesn't build openfare-lib because of the format!("{payee_name}___{unique_id}") format strings which are new in 1.58.0.

    opened by staktrace 1
  • Make this repo buildable standalone

    Make this repo buildable standalone

    Currently checking out this repo and doing a cargo build fails because it contains a path dependency to openfare-js. Looking at the openfare-js code (which is in a sibling repository), that has a path dependency back into this repository. This is not really ideal - either all three (openfare-lib, openfare-js, and openfare) should be in separate repositories using crates.io dependencies, or they should be in the same repository/workspace. I don't recall offhand if you can actually publish to crates.io with path dependencies; I suspect you need to have versioned dependencies for that so it would be better to have that in the Cargo.toml files, and then use [patch] in the workspace file to set up the local replacements.

    opened by staktrace 1
  • Fix typos

    Fix typos

    This updates "payed" to "paid" in the README. For possibly way too much information as to why this is the correct spelling here, you might be interested in this blog post.

    Thanks for this project, excited to see where it leads.

    opened by jamesa 1
Releases(v0.6.3)
Owner
null
A git prepare-commit-msg hook for authoring commit messages with GPT-3.

gptcommit A git prepare-commit-msg hook for authoring commit messages with GPT-3. With this tool, you can easily generate clear, comprehensive and des

Roger Zurawicki 3 Jan 19, 2023
Spot coupling by finding out which files are always in the same commit

git moves-together This tells you when files in the repository frequently move together. This lets you identify where the coupling is in the system. C

Billie Thompson 14 Oct 31, 2022
Mirror of oxipng for pre-commit.

oxipng pre-commit mirror Mirror of oxipng for pre-commit. Installation Add to your pre-commit config: - repo: https://github.com/adamchainz/pre-comm

Adam Johnson 11 Jan 15, 2022
Universal changelog generator using conventional commit+ with monorepo support. Written in Rust.

chlog Universal changelog generator using conventional commit+ with monorepo support. chlog can generate the changelog from the conventional commits w

Jeff Yang 3 Nov 27, 2022
A gitmoji interactive client for using gitmojis on commit messages.

gitmoji in Rust This is just an opinionated version of gitmoji-cli written in Rust . A gitmoji interactive client for using gitmojis on commit message

igor 2 Aug 16, 2022
A CLI tool that automatically writes commit messages for you.

Automagically-generated commit messages A CLI tool that generates commit messages from your staged changes, built in Rust and using OpenAI's Codex. In

Miguel Piedrafita 839 Jan 6, 2023
Easily add emojis to your git commit messages 😎

gimoji A CLI tool that makes it easy to add emojis to your git commit messages. It's very similar to (and is based on) gitmoji-cli but written in Rust

Zeeshan Ali Khan 12 May 29, 2023
A partial reimplementation of pre-commit in Rust

preco A partial reimplementation of pre-commit in Rust. Important Heavily just a proof-of-concept and work-in-progress. There are bits that could prob

Aarni Koskela 8 Feb 22, 2024
🚧 (Alpha stage software) Binary that supports remote filesystem and process operations. 🚧

distant Binary to connect with a remote machine to edit files and run programs. ?? (Alpha stage software) This program is in rapid development and may

Chip Senkbeil 296 Dec 28, 2022
Booru software for the 21st century. (Name is supposed to be like Puro, the big monster, but I failed..)

Pooru Booru software for the 21st century. Setup Setup is a little funky, but I hope to fix this funkyness down the road. First and foremost, you will

null 2 May 8, 2022
Rust Shop is a fake cloud-based software company that you can fork.

RustShop RustShop is an attempt at building a template and utilities to help quickly set up and manage a production grade cloud-based system. The core

null 56 Dec 17, 2022
High-performance BitTorrent tracker compatible with UNIT3D tracker software

UNIT3D-Announce High-performance backend BitTorrent tracker compatible with UNIT3D tracker software. Usage # Clone this repository $ git clone https:/

HDInnovations 4 Feb 6, 2023
Generate an SPDX Software Bill of Materials for Rust crates.

cargo-spdx cargo-spdx is currently in development and not yet ready for use. cargo-spdx provides a cargo subcommand to generate an SPDX Software Bill

Andrew Lilley Brinker 13 May 18, 2023
A group of Rust projects for interacting with and producing software bill of materials (SBOMs).

sbom-rs A group of Rust projects for interacting with and producing software bill of materials (SBOMs). Examples cargo-sbom Create a SPDX SBOM for a C

Paul Sastrasinh 2 Jul 10, 2023
Framework is a detector for different frameworks in one projects

Framework is a detector for different frameworks in one projects Usage use

Inherd OS Team (硬核开源小组) 3 Oct 24, 2022
Annotation to easily define ad-hoc / one-shot extension traits

Annotation to easily define ad-hoc / one-shot extension traits

Daniel Henry-Mantilla 2 Apr 19, 2022
Dr-dotnet - 🩺 One-click diagnosis of your dotnet applications. Works both locally or remotely as a web service

Dr-dotnet - ?? One-click diagnosis of your dotnet applications. Works both locally or remotely as a web service. Based on the lowest level dotnet profiling APIs and using the rust language ?? for a minimal runtime penalty.

Olivier Giniaux 25 Dec 17, 2022
✨🥞The magic pancakes cli currently supports one command

✨ ?? Magic Pancakes The magic pancakes cli currently supports one command: $ pancakes generate Installing $ cargo build --release $ cargo install --pa

Kevin Rodríguez 3 May 6, 2022
1️⃣ el lisp number uno - one lisp to rule them all 🏆

luno el lisp number uno luno is the one lisp to rule them all. Still experimental, do not use it in production yet. goals embeddable small size simple

Eva Pace 3 Apr 25, 2022