Skip to content

Instantly share code, notes, and snippets.

@nikclayton
Last active September 2, 2023 17:24
Show Gist options
  • Save nikclayton/7de6377999ac17ca92fe5070c74ba356 to your computer and use it in GitHub Desktop.
Save nikclayton/7de6377999ac17ca92fe5070c74ba356 to your computer and use it in GitHub Desktop.

Status: nik, early draft, last edit: 2023-09-02

Found an organisation to host the ongoing development of a best-in-class open-source Android client for Mastodon and Mastodon-like servers.

The organisation would run under the 7 cooperative principles:

  1. Voluntary and open membership
  2. Democratic member control
  3. Member economic participation
  4. Autonomy and independence
  5. Education, Training, and Information
  6. Cooperation among Cooperatives
  7. Concern for Community

An organisation like this is needed because the official Mastodon Android app is a second-class citizen to the iOS app, and both apps are missing features supported by the web client. This is described in GitHub - mastodon/mastodon-android: Official Android app for Mastodon which says:

Furthermore, we work off of an internal roadmap and aim for feature-parity and consistency with our iOS app. The iOS app is designated as the "primary" between the two, therefore, if you want to request features, please do so in the Mastodon for iOS repository, as you are requesting a feature to be both in iOS and Android

Other Android apps exist (including Tusky, Megalodon, Moshidon, Husky, Yuito, Trunks, Ivory, Fedilab, Tooot) but have one or more of the following concerns:

  • Managed by a solo developer, with no continuity plan
  • Not open source
  • No project governance model
  • Development has stagnated

Structure

Note: Read this section not as "This is the definite form this would take", but as "This type of entity has desirable properties, and whatever the final form looks like, it should look something like this".

A Swiss Association ("verein"), a non-profit legal entity, containing the following overlapping groups of people.

  • One executive committee
    • Collectively and individually liable for diligent and correct management of the association
    • Prepares annual activity and financial reports that are presented to the membership
  • One or more working groups
    • Scoped to specific areas of responsibility
    • Develops policy proposals and implementation for the areas it is responsible for
    • Created by:
      • The executive committee nominates initial working group members
      • The working group may admit new members by vote of the existing working group members
      • The working group may expel members by vote of the existing working group members
    • Dissolved by;
      • The working group members may vote to dissolve the group
      • The membership may vote to dissolve the group
  • The membership

Through the rest of these documents I have tried to use "association" to mean the legal entity described here, and "project" as the application and related code that the association is developing.

Bootstrapping

In the early days of the association there will be too few members to support multiple working groups. I expect there will be a single "core contributors" working group, responsible for week-to-week development and operation of the project.

That will change as the association grows and the number of contributors allows for more working groups to be created as the association carries out more work.

Open membership

The association supports open membership, per cooperative principle #1:

Cooperatives are voluntary organisations, open to all persons able to use their services and willing to accept the responsibilities of membership, without gender, social, racial, political or religious discrimination.

What does the Executive Committee do?

The committee must provide an annual report for the general meeting. This report covers the activities the committee has done, and includes annual financial statements (vitamin B).

Other responsibilities of the committee are defined in the articles of association. I expect the day-to-day running of the project would be devolved to one or more working groups.

Committee members have liability:

The executive committee is liable to the association for diligent and correct management. [...] If committee members intentionally or negligently harm the association (culpable violation of their due diligence), they are personally liable for the damage.

Member rights and responsibilities

Rights

  • Can propose new policy and modifications to existing policy
  • Can vote on proposals
  • Can submit agenda items for inclusion in the general meeting
  • Can call for a vote to hold an extraordinary general meeting
  • Can stand for membership of the executive committee and/or working groups
  • Can vote for members standing for the executive committee and/or working groups

Responsibilities

  • Pay the membership fee within 30 days of receipt
  • Participate in votes when held (abstention must be explicit, not a simple "did not vote")
  • General duty of loyalty to the organisation

Contributions by non-members

Non-members of the association would be free to contribute to the association's software project(s).

Non-members may be employed by the association to carry out specific activities or provide advice to the executive committee or working groups.

Membership fee

A Swiss Association does not require that membership is paid.

However, this association would require membership fees, per cooperative principle #3:

Members contribute equitably to, and democratically control, the capital of their cooperative. At least part of that capital is usually the common property of the cooperative. Members usually receive limited compensation, if any, on capital subscribed as a condition of membership. Members allocate surpluses for any or all of the following purposes: developing their cooperative, possibly by setting up reserves, part of which at least would be indivisible; benefiting members in proportion to their transactions with the cooperative; and supporting other activities approved by the membership.

The initial fee is to be determined.

The association may choose to create different membership levels that confer the same rights but with a different membership fee. For example, enrolled students.

Payments to members

I do not expect that members will be paid for participating in working groups.

Executive committee members cannot be paid if the association is to be tax-exempt:

There is no legal entitlement to compensation for committee members. On the contrary: an important condition for the association's tax-exempt status is that committee members perform their role on an unpaid basis. They are, of course, entitled to the payment of any expenses incurred. Compensation can be provided for special professional tasks but this should always be linked to specifically described and limited assignments.

In general, other member contributions to the project will not be paid either; code contributions, project management, documentation, etc.

The project may need to pay members or non-members for bespoke services, such as developing artwork, or delivering training.

Some of the project's funds could be used to provide grants to individuals to complete specific projects. Before that can happen a specific grant policy would need to be developed and approved by the membership.

The project may build up a surplus of funds, and members may vote on proposals to donate some of that surplus to other organisation that are in line with the association's goals.

Donations

People may choose to donate to the association without becoming a member.

Other questions

Who are you?

I'm Nik, I've been contributing to open source projects since the early 1990s. I've run large open source events (I was one of the co-founders of BSDCon Europe back in 2001). I've started open source projects, joined open source projects, been given stewardship of existing projects, and handed stewardship of projects I've started over to other people.

On Mastodon I'm @nikclayton@mastodon.social.

I contributed to the Tusky project December 2022 - August 2023. My first contribution improved the FAQ (#16). Since then I contributed more than 150 PRs to the project. If you've been affected by bugs like:

  • The swipe sensitivity between tabs being way too high (fixed: #3148)
  • Losing your place when you press "Load more" (fixed: #3000)
  • Missing notifications (fixed: #3700 (and many others))
  • Images getting "stuck" when trying to zoom or swipe between them (fixed: #3894)

then I'm the one who fixed them.

I've also improved the app's accessibility including #3003, #3121, #3272, and #3248.

As @connyduck started reducing his involvement with the project I took on the responsibility of producing new releases, managing the releases for Tusky versions 22.0 and 23.0. That includes running the release process, writing the release notes, managing the beta programme, responding to user bug reports, and so on.

For the last several months all (or very nearly all) of the posts or replies from the @tusky@mastodon.social account have been from me. And a cursory review of PRs over the last few months will show that the majority of them are reviewed and merged by me as well.

In short; I know open source. I get work done. I know what good project governance looks like.

Why Switzerland?

I live there.

Switzerland has a "Cooperative" legal entity, why not use that?

It does. The rules describing a Swiss Cooperative are described in the Swiss Civil Code, articles 828-926. The rules describing a Swiss Association are in the Swiss Civil Code, articles 60-79

Creating a Swiss Cooperative is more burdensome than creating a Swiss Association, and they have a number of important differences.

Association Cooperative
Minimum # founding members? 2 7
Requires nominal capital to found? No Yes
Must be in commercial register? No Yes
Liability accrues to...? Executive Committee only May include members
Must be non-profit? Yes No
Issues shares? No Yes

Note: I am not a lawyer, that is my understanding from reading the Swiss Civil Code.

There are an estimated 80,000 to 100,000 associations in Switzerland, representing fields as diverse as sport, culture, politics, science and charity. Anyone seeking to set up their own association generally has a good deal of room for manoeuvre. This is because the law makes founding an association relatively straightforward. Under Swiss association law, written articles of association are required to found an association, and these must be presented to the founding members at a founders’ meeting. The association comes into existence as soon as they have been adopted. [...] An association is always the appropriate legal form if a group of people wish to pursue a non-material, i.e. non-commercial, goal.

The Swiss Mastodon server https://swiss.social operates as an Association (https://verein.swiss.social)

Do the members have to be Swiss-resident too?

No.

Persons with residence in a foreign country may be founding members, committee members and/or future members of an association domiciled in Switzerland. An association domiciled in Switzerland is governed by Art. 60 ff. of the Swiss Civil Code; it can be founded as such if it has any relation to Switzerland: area of activity (also) in Switzerland, open (also) to members from Switzerland. For associations with an international background it makes sense to have at least one committee member who is a Swiss resident.

Do the members have any financial risk?

No.

An association is an independent legal entity. Hence, association members are not personally liable for the association’s debt.

What about an iOS app?

If the project attracted members with the time and skills to build one, and wanted to do that under the association's umbrella they could create a proposal to do so.

I am not doing that because creating iOS apps is not my area of expertise.

What about developing other Mastodon-related software?

I can see a future where the association grows to support the hosting and development of other software that is related to Mastodon and Mastodon-like servers.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment