Skip to content

WIP: Initial work on Project Lifecycle. #332

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
101 changes: 101 additions & 0 deletions project-lifecycle.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
# Protocol Labs Project Lifecycle

* Outline
* Active States
* L0: Prototype
* L1: “In Org”
* L2: Contributors Welcome!
* L3: Growth
* L4: Top Project
* L5: Flagship Project
* Inactive States
* D0: Actively Maintained
* D1: Critical Fixes Only
* D2: Hard Deprecated

## Lifecycles and API Stability

For the most part, a project’s place in the lifecycle does not describe it’s API stability.
API stability is required once enough people depend on that API and can’t always be planned for.

However, it is assumed that once a project reaches L3 the project is actively soliciting
users and is dedicated to supporting them by not breaking API unless absolutely necessary.
Similarly, API changes should not happen in inactive states as we are no longer soliciting
users and are only investing to the extent that people already depend on them.

## L0: Prototype

*Examples: proto.school*

During the initial stages of development projects exist either on developer’s personal GitHub
accounts or in specific orgs like shipyard that are intended to house experimental development
and demo’s.

At this stage, attention is a liability, and providing a nice website, good documentation,
or other promotion would only bring unwanted attention too early.

## L1: “In Org”

*Examples: interface-ipld*

When projects are moving into relevant PL orgs they are expected to have:

* Guaranteed test coverage at a reasonable level.
* TBD: other automation.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does L1 explicitly indicate that PL is dedicated to supporting the project going forward? I’m thinking about the confusion brought about by repos like ipfs-mans or ipfs-nodeschool, where there were only a few commits on a single day and no further effort.

There are lots of repos like this, and I have heard feedback about frustration from this by users, so one thing I’d love to see clarified in these descriptions is a level of commitment.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also, are there implications on licensing here? What if someone starts something as a personal project in their own account, but it moves to the IPFS org — does the license need to be reassigned to PL, or do we expect that some “in org” projects have individual copyright?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also also, do we make some guarantees about READMEs and descriptions at this point? (or is that L2?) I’m thinking of ipfs-inactive/docs#55.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does L1 explicitly indicate that PL is dedicated to supporting the project going forward?

We're supporting it while it is L1 or higher but it could still be moved to D0 and we'd move away from it.

I’m thinking about the confusion brought about by repos like ipfs-mans or ipfs-nodeschool, where there were only a few commits on a single day and no further effort.

Those are probably L0. They look like prototypes we built and then let go of. This will happen a lot, and that's why there is a level for them where they aren't in main orgs or messaged as being supported.

Also, are there implications on licensing here? What if someone starts something as a personal project in their own account, but it moves to the IPFS org — does the license need to be reassigned to PL, or do we expect that some “in org” projects have individual copyright?

There's two terms we need to be clear about: copyright ownership and copyright license.

For the most part, people own their contributions. Companies can own contributions they've paid for but it's actually quite rare that a company will transfer ownership from an individual to the company, mostly because certain countries (Germany) just don't recognize a complete transfer of intellectual property.

A license is the rights non-owners are granted to the property. Public licenses grant the public rights to the work. For the most part, we only need to care that the work is licensed under a good public licenses (which ones we use/recommend is a longer conversation). We don't need to own the copyright. We may need to own the trademark if there is one, but that's a totally different legal structure than copyright which would take a long time to discuss :)

Also also, do we make some guarantees about READMEs and descriptions at this point? (or is that L2?) I’m thinking of ipfs-inactive/docs#55.

That's up for discussion. The important thing here is that L1 needs consistent tooling/docs to make it useful within the project and L2 needs consistent tooling/docs for it to be useful to people outside the project.

Copy link
Contributor

@Mr0grog Mr0grog Aug 15, 2018

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We're supporting it while it is L1 or higher but it could still be moved to D0 and we'd move away from it.

Awesome. I feel like it might be worth stating that explicitly, e.g. * Commitment to support and grow this project going forward and, if that changes by moving to D0/D1/D2, we’ll make that explicitly clear.

Those are probably L0. They look like prototypes we built and then let go of. This will happen a lot, and that's why there is a level for them where they aren't in main orgs or messaged as being supported.

Maybe worth noting this as a descriptive point? e.g. Being a repo in one of the main orgs signals L1+ status, so most projects should not start there. We haven’t done that well in past, but part of the goal with this plan is to change that.

There's two terms we need to be clear about: copyright ownership and copyright license.

Yes! Sorry, I should have written “does the copyright line in the license need to be reassigned.” But you answered that question anyway :)

we only need to care that the work is licensed under a good public licenses (which ones we use/recommend is a longer conversation)

I think it is worth making this a clear point in the doc, e.g. “L1+ projects must have a public, open source (?) license.” Seems reasonable not to specify exactly which licenses are ok here — we’ve had long discussions and have a policy on what licenses should be used for original PL projects, but agree that projects coming from elsewhere/other people might not use that specific set of licenses, and that’s ok.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe worth noting this as a descriptive point? e.g. Being a repo in one of the main orgs signals L1+ status, so most projects should not start there. We haven’t done that well in past, but part of the goal with this plan is to change that.

Probably a good idea, but I want to hear what @diasdavid has to say about the lifecycle before I sign us up for such a big shift in policy.

I think it is worth making this a clear point in the doc, e.g. “L1+ projects must have a public, open source (?) license.” Seems reasonable not to specify exactly which licenses are ok here — we’ve had long discussions and have a policy on what licenses should be used for original PL projects, but agree that projects coming from elsewhere/other people might not use that specific set of licenses, and that’s ok.

This probably needs to go in another document, and to some extent I think is already documented elsewhere, and we can link here. We also require the DCO and signoff signatures in commits. There's a ton of rules for being "in org" we need to tighten up. For now, I'm going to say that it's out of scope for this doc and find something to link to that we can iterate on later.


## L2: Contributors Welcome!

*Examples: peerpad*

At this stage the project is ready to solicit additional contributors from
the community. It should expect.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think ”users (or people) should expect” might be better phrasing here.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hrm... maybe we should have two sections at this point.

On the one hand, I want to note what project engineers should expect in terms of support from the rest of the org. Additionally, at this point users should also have expectations.


* Occasional features in the newsletter and in social media.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Are you planning to revive https://github.com/ipfs/newsletter, or are you thinking of something different here?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, we're in discussions to do a monthly newsletter :)

* Community Engineering Support:
* Issue Triage and cleanliness
* TBD: other automation.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What level of stability, activity, and focus should contributors and users expect here?

  • Frequent API changes?
  • Minimal documentation?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I want to stay away from making API stability guarantees in the leveling. Different projects will have different requirements around this. For the most part, I think that stability should be dictated by the downstream users. The more people depend on something the more effort we have to make to not break them. No leveling or proposed planning for stability can change how many depend on a project.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No leveling or proposed planning for stability can change how many depend on a project.

Totally true! I’m more trying to get at what commitments or non-commitments people should expect at a minimum of a project at this level. I guess I was feeling like it’s useful to be clear that L2 is still a fuzzy stage for a project so we explicitly don’t guarantee much stability (whether a project does or doesn’t have more stability in practice is a different story, as you say).

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think that individual projects needs to decide what their API stability policies are. I don't think this is something we can generalize sufficiently in the leveling. One big issue is that the needs you have in API stability change dramatically based on how you consume dependencies, so package managers and modules system make a big difference. It's entirely possible that big API changes are acceptable even at stable points in the cycle for certain projects.

However, to your point, I think that we should make it clear that at L0 we make NO guarantees.


## L3: Growth

*Examples: dag-cbor, js-libp2p*

At this stage the project is ready to solicit many more users and dependents than it currently has.
It should expect:

* Frequent features in the newsletter and in social media.
* Featured talks and videos in YouTube channel.
* Content Creation: workshops, tutorials, documentation, conference talks.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You said it a little at the top, but we should repeat here:

  • A relatively stable API (semantic versioning?)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not all languages have adopted semantic versioning so I wouldn't want to lay that down as such a broad rule. In terms of API stability, see prior comments on API stability :)

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In terms of API stability, see prior comments on API stability

I totally understand not having anything specific to say in L2 (per your prior comment), but you’ve already made a broad, L3-level statement about stability at the top of the doc (“However, it is assumed that once a project reaches L3 the project is actively soliciting users and is dedicated to supporting them by not breaking API unless absolutely necessary”). That seems worth restating here so when people inevitably breeze past the descriptive intro, it’s still listed in this part, where people are looking for actual requirements/expectations.


## L4: Top Project

*Example: js-ipfs, go-ipfs*

At this stage the project has reached a level of maturity in users and community that we feature it often.

* Frequent talks and workshops at our events.
* Featured spot in the GitHub org (if available).

## L5: Flagship Project

*Examples: libp2p, IPFS, IPLD*

Most project repositories do not reach this point. This status is reserved for broader “project” contexts.
Projects should expect:

* Fancy website
* Dedicated social media accounts

## D0: Actively Maintained

*Examples: dag-protobuf*

This status is for libraries we still maintain and possibly even rely on but have already made a strategic
decision to move away from.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do the types of things in ipfs-inactive/docs#54 come in here or in D1? (Or some here and some in D1 or D2, like archiving on GitHub?)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Those sound like D1 or D2. dag-pb is the primary use case for D0. We are still using it, actively, in IPFS but we know we want to stop in the future. All new features are being planned on dag-cbor or to be for a somewhat agnostic format that new dags support but dag-pb doesn't. We need to stop pointing to the docs and stop pushing people down a path that uses the library but it isn't in any real sense "deprecated" because we're still using and actively developing it.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ahhhhhh, I see, so D0 isn’t deprecated, it’s more about intent to deprecate.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I guess I had some confusion here because UnixFS v1 & dag-protobuf are currently more than just maintained; they get active changes and improvements, so the name (“actively maintained”) made think this was more of a state those libraries would move into in the future.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Correct. The roots of this lifecycle go all the way back to when I saw a table of IPLD implementations that noted dag-pb as being "deprecated" which was incredibly confusing because we were still using it everywhere and it's still the default.


## D1: Critical Fixes Only

We’ve deprecated our own use to the extent that we can and encourage the community to do the same.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does this specifically mean there should be an alternative solution or approach to whatever the project was meant to do? (e.g. dag-protobuf might move here only when UnixFS v2 is shipping and on by default in IPFS.)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Correct, we should always be able to point to docs for new things that satisfy these use cases. There's lots of future cases for this, we have GraphSync eventually replacing Bitswap for instance.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we should always be able to point to docs for new things that satisfy these use cases

Can we say here that we will recommend better alternative tools or approaches? :)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, I'll add that in.


## D2: Hard Deprecated

Using this library is actively harmful.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Guessing no, since D1 is “critical fixes only,” but do we make any guarantees about maintenance or security fixes? Would be good to clearly spell out any guarantees we make here (or that we don’t make any).

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

At this point we don't make any changes ever. It's rare to deprecate something to this point unless the project's design causes security concerns or if the underlying dependencies (like crypto) have known vulnerabilities that aren't being fixed. This happens a lot when a project is tightly bound to a version of OpenSSL, you can't update it without breaking ABI and the version it is binding to is no longer maintained by OpenSSL.