Skip to content

Commit b70e587

Browse files
Add Keepable Software as a CCCP thematic strand (#37)
## What Integrates **Keepable Software** into CCCP in two ways: 1. As an **integral constitutional principle** of the main manifesto (`README.adoc`); and 2. As an **independent, referenceable thematic strand** (`docs/strands/keepable-software.adoc`) that adopter projects can cite. Core idea: > Software should remain runnable, inspectable, forkable, exportable, and meaningfully ownable by the person who downloads it. ## Framing (important) Keepable Software is **one CCCP aspiration among many**, not a replacement for anything. It sits alongside the language policy, technical excellence, distributed state, formal verification, community, and offline-first autonomy. Part of the guarantee lives in the **code** (what runs locally, what is exportable/forkable) and part in the **licence** (what the user is legally free to keep, run, inspect, fork). Good languages and sound engineering remain the foundation; keepability is a property that foundation should produce. The README now says this explicitly so the manifesto stays coherent. Nexia-List appears only as a **brief reference example** of a project applying this strand — not as the source or sole definition of the principle. ## Changes - **`README.adoc`** - New `== Keepable Software` section (near the Citadel), with the "download it, keep it, run it, inspect it, fork it" quote. - `Offline-First as Autonomy` extended with keepable-software bullets + a cross-reference to the new section. - New `== CCCP Thematic Strands` catalogue (before `CCCP Certification`) linking the strand doc. - `Political` temperature row now mentions keepable-software design. - Explicit "one aspiration among many, does not replace the rest" framing paragraph. - **`docs/strands/keepable-software.adoc`** — full strand definition (status, design commitments, web-first-not-web-captive, adoption criteria, non-goals, Nexia-List reference example, badge text). - **`.machine_readable/cccp/strands/keepable-software.yml`** — machine-readable strand metadata. - **`docs/badges/keepable-software.adoc`** — badge guidance. ## Notes / deviations from the brief - README strand link uses `link:docs/strands/keepable-software.adoc[…]` rather than `xref:`, to match the README's existing cross-file convention (`link:CONTRIBUTING.adoc`, `link:TOPOLOGY.md`) and render correctly on GitHub. It points at the real file. - SPDX/copyright headers added to the new `.adoc`/`.yml` files to match repo convention. - Nothing was removed; existing CCCP/RSR language around political autonomy, offline-first, and anti-lock-in is untouched and only extended. - No local `asciidoctor` available to render-check; validated structure manually (section anchors `_keepable_software` / `_cccp_thematic_strands` resolve, link target exists) and confirmed the YAML parses. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
1 parent fa3edd3 commit b70e587

4 files changed

Lines changed: 228 additions & 1 deletion

File tree

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
# SPDX-License-Identifier: CC-BY-SA-4.0
2+
# Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
3+
id: cccp.keepable-software
4+
name: Keepable Software Strand
5+
campaign: Campaign for Cooler Coding and Programming
6+
status: proposed
7+
summary: >
8+
Software should remain runnable, inspectable, forkable, exportable,
9+
and meaningfully ownable by the person who downloads it.
10+
11+
principles:
12+
- local-first where practical
13+
- offline-capable where possible
14+
- web-first is acceptable; web-captive is not
15+
- meaningful downloadable artefact
16+
- inspectable build path
17+
- exportable user data
18+
- no mandatory remote execution for core experience unless clearly justified
19+
- honest declaration of remaining service dependencies
20+
21+
preferred_phrases:
22+
- web-first, not web-captive
23+
- anti-hostageware
24+
- anti-confiscation-by-architecture
25+
- download it, keep it, run it, inspect it, fork it
26+
27+
anti_patterns:
28+
- hostageware
29+
- confiscation-by-architecture
30+
- service-only ownership
31+
- opaque remote execution as the only runtime
32+
- data export as an afterthought
33+
- user work trapped behind subscription or platform continuity
34+
35+
adoption_questions:
36+
- Can a user keep a meaningful copy?
37+
- Can a user run a meaningful version without the original service?
38+
- Can a user inspect the code or build process?
39+
- Can a user export their data?
40+
- Can the project survive a hosting provider, app store, API, or vendor disappearing?
41+
- Are remaining external dependencies named honestly?
42+
43+
reference_examples:
44+
- name: Nexia-List
45+
role: reference adopter
46+
claim: local-first browser software with a Rust/WASM client-side core
47+
note: >
48+
Nexia-List is cited only as an example of the strand, not as the origin
49+
or sole definition of the principle.

README.adoc

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ CCCP defines *principles and policies* for building software that is:
4747
| Warm community with graduated trust, cool-headed technical decisions
4848

4949
| *Political*
50-
| Resistance to monopolistic tooling, anti-corporate lock-in, autonomy through offline-first design
50+
| Resistance to monopolistic tooling, anti-corporate lock-in, autonomy through offline-first and keepable-software design
5151
|===
5252

5353
== Core Principles
@@ -65,6 +65,13 @@ Rejecting the npm/node ecosystem's fragility in favor of:
6565
* Work continues without constant connectivity
6666
* No cloud-dependent tooling
6767
* SaltRover for offline repository management
68+
* Local execution where practical
69+
* Offline-capable operation where possible
70+
* Exportable user data
71+
* No mandatory remote execution for the core experience unless clearly justified
72+
* Hosted services may enhance the project, but must not become hostage architecture
73+
74+
This principle extends into the <<_keepable_software,Keepable Software>> section below: offline-first is one of the ways CCCP keeps the user's software, data, and work from disappearing behind someone else's switch.
6875

6976
=== 3. Distributed State Without Coordination
7077

@@ -227,6 +234,28 @@ The *Citadel* is where RSR meets CCCP — the actual implementation pattern that
227234
* *Collective Defense* — Architecture makes mutual aid easier than isolation
228235
* *Safe Haven* — Emotionally and technically safe to experiment
229236

237+
== Keepable Software
238+
239+
CCCP treats user ownership as an architectural property, not merely a licence statement.
240+
241+
Software should remain runnable, inspectable, forkable, exportable, and meaningfully ownable by the person who downloads it.
242+
243+
This does not require every project to reject the web, cloud services, sync, accounts, or hosted infrastructure. It requires that those service layers do not become the only place where the user's software, data, or work can exist.
244+
245+
CCCP therefore prefers projects that are web-first without being web-captive, local-first where practical, offline-capable where possible, and honest about remaining external dependencies.
246+
247+
Keepable Software is *one* of CCCP's aspirations, not the whole of it. It sits alongside the language policy, technical excellence, distributed state, formal verification, community, and offline-first autonomy described elsewhere in this manifesto — and it does not replace any of them. It is a better way of doing things rather than a new gate: part of the guarantee lives in the code (what runs locally, what is exportable, what is forkable), and part lives in the licence (what the user is legally free to keep, run, inspect, and fork). Good languages and sound engineering remain the foundation; keepability is one of the properties that foundation should produce.
248+
249+
In short:
250+
251+
[quote]
252+
____
253+
Download it. Keep it. Run it. Inspect it. Fork it.
254+
Do not make the user's own work disappear behind someone else's switch.
255+
____
256+
257+
Keepable Software is both an integral CCCP principle and a named thematic strand that adopter projects can reference. See <<_cccp_thematic_strands,CCCP Thematic Strands>> for the strand catalogue.
258+
230259
== Relationship to RSR
231260

232261
[source]
@@ -246,6 +275,14 @@ Your Repository (Implementation)
246275
└── Politically autonomous
247276
----
248277

278+
== CCCP Thematic Strands
279+
280+
CCCP principles may be expressed through named thematic strands: focused design commitments that projects can adopt, test, and refine.
281+
282+
Current strands include:
283+
284+
* link:docs/strands/keepable-software.adoc[Keepable Software] — web-first, not web-captive; downloadable, inspectable, forkable, exportable, and meaningfully runnable by the user.
285+
249286
== CCCP Certification
250287

251288
Projects can display CCCP certification when they:

docs/badges/keepable-software.adoc

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
// SPDX-License-Identifier: CC-BY-SA-4.0
2+
// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
3+
= Keepable Software Badge
4+
5+
Projects that adopt the CCCP Keepable Software Strand may use:
6+
7+
----
8+
CCCP: Keepable Software
9+
----
10+
11+
Suggested Markdown badge:
12+
13+
----
14+
[![CCCP: Keepable Software](https://img.shields.io/badge/CCCP-Keepable%20Software-c41e3a)](https://github.com/hyperpolymath/cccp/blob/main/docs/strands/keepable-software.adoc)
15+
----
16+
17+
Suggested README wording:
18+
19+
----
20+
This project follows the CCCP Keepable Software strand: web-first where useful, not web-captive by design.
21+
----
Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
// SPDX-License-Identifier: CC-BY-SA-4.0
2+
// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
3+
= Keepable Software Strand
4+
:toc:
5+
:sectnums:
6+
7+
== Status
8+
9+
CCCP thematic strand: proposed / experimental
10+
11+
== Summary
12+
13+
The Keepable Software Strand names a CCCP design commitment:
14+
15+
[quote]
16+
____
17+
Software should remain runnable, inspectable, forkable, exportable, and meaningfully ownable by the person who downloads it.
18+
____
19+
20+
This strand covers projects that are web-accessible but not web-captive.
21+
22+
A Keepable Software project may use a browser interface, optional sync, hosted builds, update services, or companion infrastructure. However, the user's ability to run a meaningful version of the software must not depend entirely on a continuing subscription, remote execution service, central vendor, proprietary runtime, or disappearing platform.
23+
24+
== Core Intention
25+
26+
Keepable Software is not anti-web.
27+
28+
It is anti-hostageware.
29+
30+
It is not anti-cloud.
31+
32+
It is anti-confiscation-by-architecture.
33+
34+
It is not nostalgia for desktop software.
35+
36+
It is a modern design discipline for software that users can keep.
37+
38+
== Design Commitments
39+
40+
A project following this strand should aim to be:
41+
42+
* local-first where practical;
43+
* offline-capable where possible;
44+
* downloadable as a meaningful artefact;
45+
* inspectable by technically competent users;
46+
* forkable under a recognised software licence;
47+
* exportable in relation to user data;
48+
* runnable without mandatory remote execution for the core experience, unless clearly justified;
49+
* portable across reasonable platform churn;
50+
* honest about which parts still depend on external services.
51+
52+
== Web-First, Not Web-Captive
53+
54+
A project may be web-first if the browser is the main user interface.
55+
56+
A project becomes web-captive when the browser is only a window onto somebody else's disappearing machine.
57+
58+
A CCCP-aligned web-first project should therefore prefer:
59+
60+
* client-side execution where practical;
61+
* WebAssembly for real local engines where appropriate;
62+
* progressive web application patterns;
63+
* exportable user data;
64+
* documented build and recovery paths;
65+
* minimal dependency on platform-specific stores or accounts.
66+
67+
== Adoption Criteria
68+
69+
A project may claim alignment with the Keepable Software Strand when it can answer these questions clearly:
70+
71+
. Can a user keep a meaningful copy?
72+
. Can a user run a meaningful version without the original service?
73+
. Can a user inspect the code or build process?
74+
. Can a user export their data?
75+
. Can the project survive a hosting provider, app store, API, or vendor disappearing?
76+
. Are remaining external dependencies named honestly?
77+
78+
== Non-Goals
79+
80+
This strand does not require every project to be fully offline.
81+
82+
It does not require rejecting all servers, clouds, accounts, APIs, or hosted services.
83+
84+
It does not require pretending that maintenance, security updates, and ecosystem dependencies are free.
85+
86+
It only requires that the project does not deliberately make the user helpless when the service layer changes.
87+
88+
== Reference Example: Nexia-List
89+
90+
Nexia-List is a reference example of this strand.
91+
92+
It is local-first in design and web-first in interface. Its primary target is the browser. Its Rust core is intended to compile to WebAssembly so the real engine can run client-side, with no server required for the essential experience.
93+
94+
A desktop shell may exist as an optional external layer, but the browser remains the primary interface.
95+
96+
The relevant CCCP claim is not that Nexia-List avoids the web. The claim is that it aims to be web-first without being web-captive.
97+
98+
== Badge Text
99+
100+
Suggested badge label:
101+
102+
----
103+
CCCP: Keepable Software
104+
----
105+
106+
Suggested badge meaning:
107+
108+
----
109+
web-first, not web-captive
110+
----
111+
112+
== Short Form
113+
114+
Keepable Software means:
115+
116+
[quote]
117+
____
118+
Download it. Keep it. Run it. Inspect it. Fork it.
119+
Do not make the user's own work disappear behind someone else's switch.
120+
____

0 commit comments

Comments
 (0)