- Software is eating the world, which is to say, software is becoming an ever-increasing part of
everyday life.
- Software has become "core infrastructure" that we rely on like we rely on running water and electricity.
- Software exists in several layers:
- Protocols
- Languages
- Libraries
- Platforms
- Products
- Services
- Each layer is built on the layer above it, with some interesting edge cases
- Like any taxonomy, this taxonomy is imperfect.
- There are strong economic models that currently exist for building Platforms, Products, and
Services.
- Easy to make money building these things.
- There is no strong economic model for sustainably resourcing the development of Libraries and Protocols.
- Problem: Platforms, Products, and Services are built atop Libraries and Protocols.
- This creates an "unsteady foundation" where Libraries and Protocols are not adequately supported, causing the upper layers to fail.
- There is also tremendous waste in building the upper layers since Libraries and Protocols are not being optimally developed and maintained, causing churn-having to be rebuilt due to abandonment.
- Tremendous leverage at lower layers! Yet no strong economic model for developing them, so
that leverage is wasted.
- Each layer has potentially an order of magnitude of impact to the layer above it.
- a single protocol can support 10x as many libraries. a single library can support 10x as many platforms, and so forth.
- Each layer has potentially an order of magnitude of impact to the layer above it.
- Traditional solutions to this problem have involved licensing the software itself, which
assumes that the point of leverage is literally the source code that is produced.
- This is a naive and unhelpful view of code/programs. The source only is effective within the context of a living system. Extracted from the system it has little to no value.
- The bits are not the value!
- It turns out, the rival, non-fungible good is actually developer time to build and
maintain open source software!
- We should focus on models that properly incentivize the deployment of developer time.
- The other challenge is coordination.
- Occasionally a library is maintained principally by a single maintainer with little assistance from the community
- Most often libraries and protocols are actually a network or community who each play different roles in the maintenance and extension of that resource.
- The mechanisms we have for coordinating groups of developers and community members are
immature and poorly understood.
- The most obvious organizing mechanism for the creation of software is the corporation. However, for the sake of resiliency and anti-fragility, it's preferable to have developers from multiple organizations all working on the project, together.
- Another mechanism is the "core maintainer group." This mechanism is widely used, but also poorly documented and understood.
- A final mechanism frequently used is the open source foundation. I don't know that much about how foundations work, how successful they have been, etc.
- An emerging model worth exploring is the Networked Organization, which can be thought of as applying some of the principles of decentralization a la software to the corporation itself.
Open Source's Resourcing Problem
Work in Progress: These are a set of working notes about the problem of creating sustainable ecosystems for resourcing the creation and maintenance of software systems.