Skip to content

Commit fb79fca

Browse files
thilobillerbeckdjacuinfinisilroberthcafkafk
authored
governance: bootstrap page (#1864)
Convert the values page into something that is more clear about how the projects governance is working. --------- Co-authored-by: Dan Baker <daniel.n.baker@gmail.com> Co-authored-by: Silvan Mosberger <silvan.mosberger@tweag.io> Co-authored-by: Robert Hensing <roberth@users.noreply.github.com> Co-authored-by: Christina Sørensen <christina@cafkafk.com>
1 parent 42347eb commit fb79fca

File tree

5 files changed

+372
-219
lines changed

5 files changed

+372
-219
lines changed

core/astro.config.mjs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,9 @@ export default defineConfig({
5555
vite: {
5656
plugins: [tailwindcss()],
5757
},
58+
redirects: {
59+
'/values': '/governance',
60+
},
5861
env: {
5962
schema: {
6063
THEME: envField.string({
Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,14 @@
11
---
2-
2+
const { dark } = Astro.props;
33
---
44

55
<div
6-
class="bg-secondary-afghani-blue-95 text-secondary-afghani-blue-15 rounded-3xl p-8 font-bold"
6+
class:list={[
7+
'my-4 rounded-xl p-8 font-bold',
8+
dark
9+
? 'dark bg-secondary-afghani-blue-35 text-secondary-afghani-blue-95!'
10+
: 'bg-secondary-afghani-blue-95 text-secondary-afghani-blue-15',
11+
]}
712
>
813
<slot />
914
</div>

core/src/content/menus/header.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ items:
55
link: /download
66
- name: Learn
77
link: /learn
8-
- name: Values
9-
link: /values
8+
- name: Governance
9+
link: /governance
1010
- name: Community
1111
link: /community
1212
- name: Blog

core/src/pages/governance.astro

Lines changed: 360 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,360 @@
1+
---
2+
import Container from '../components/layout/Container.astro';
3+
import Divider from '../components/layout/Divider.astro';
4+
import PageHeader from '../components/layout/PageHeader.astro';
5+
import Layout from '../layouts/Layout.astro';
6+
7+
import Quotation from '@/components/ui/Quotation.astro';
8+
import { getCollection, getEntry } from 'astro:content';
9+
import Citation from '../components/ui/Citation.astro';
10+
11+
const teams = await getCollection('teams');
12+
const foundationBoard = await getEntry('teams', '010_foundation-board');
13+
const steeringCommittee = await getEntry('teams', '000_steering-committee');
14+
15+
const getMemberLink = (member) => {
16+
if (member.github)
17+
return [`https://github.com/${member.github}`, member.github];
18+
else if (member.discourse)
19+
return [
20+
`https://discourse.nixos.org/u/${member.discourse}`,
21+
member.discourse,
22+
];
23+
else return [null, member.name];
24+
};
25+
---
26+
27+
<Layout title="Governance">
28+
<PageHeader text="Governance" />
29+
<Container class="py-8 leading-relaxed font-extralight">
30+
<h2
31+
class="font-heading text-secondary-afghani-blue mt-8 text-4xl font-bold"
32+
>
33+
Nix Leadership Bodies
34+
</h2>
35+
<p>
36+
We use the term Nix community as an umbrella term for the broader project;
37+
not just the package manager implementation.
38+
</p>
39+
<p class="mb-6">The Nix community is guided by two leadership bodies:</p>
40+
<div class="mt-2 mb-3 grid gap-4 md:grid-cols-2">
41+
<div
42+
class="bg-secondary-afghani-blue-95 flex w-full flex-col gap-2 rounded-xl p-4"
43+
>
44+
<h3
45+
class="font-heading text-secondary-afghani-blue text-3xl leading-none font-bold"
46+
>
47+
The Steering Committee (SC)
48+
</h3>
49+
<span class="text-secondary-afghani-blue-35 text-lg">
50+
Elected members forming the governing body for technical and community
51+
leadership.
52+
</span>
53+
<span>
54+
<b>Responsibilities:</b> Technical and community decisions, delegation and
55+
guidance on partnership decisions
56+
</span>
57+
<span>
58+
<b>Members:</b>
59+
{
60+
steeringCommittee.data.members.map((member, idx) => {
61+
const data = getMemberLink(member);
62+
if (data[0]) {
63+
return (
64+
<>
65+
{' '}
66+
<a href={data[0]}>@{data[1]}</a>
67+
{idx < steeringCommittee.data.members.length - 1 ? ',' : ''}
68+
</>
69+
);
70+
} else {
71+
return data[1];
72+
}
73+
})
74+
}
75+
</span>
76+
<a href="/community/teams/steering-committee">More Info</a>
77+
</div>
78+
<div
79+
class="bg-secondary-afghani-blue-95 flex w-full flex-col gap-2 rounded-xl p-4"
80+
>
81+
<h3
82+
class="font-heading text-secondary-afghani-blue text-3xl leading-none font-bold"
83+
>
84+
The Foundation Board
85+
</h3>
86+
<span class="text-secondary-afghani-blue-35 text-lg">
87+
Board members of the Stichting NixOS Foundation, a non-profit
88+
organisation in the Netherlands
89+
</span>
90+
<span>
91+
<b>Responsibilities:</b> Legal, financial and partnership decisions and
92+
delegation
93+
</span>
94+
<span>
95+
<b>Members:</b>
96+
{
97+
foundationBoard.data.members.map((member, idx) => {
98+
const data = getMemberLink(member);
99+
if (data[0]) {
100+
return (
101+
<>
102+
{' '}
103+
<a href={data[0]}>@{data[1]}</a>
104+
{idx < foundationBoard.data.members.length - 1 ? ',' : ''}
105+
</>
106+
);
107+
} else {
108+
return data[1];
109+
}
110+
})
111+
}
112+
</span>
113+
<a href="/community/teams/foundation-board">More Info</a>
114+
</div>
115+
</div>
116+
<p>
117+
Many decisions are made in a distributed way by the <a href="/community"
118+
>{teams.length} teams</a
119+
>, among many other ones not listed on the website and many more
120+
individual specialists, responsible for various areas. From the leadership
121+
bodies down to individual contributors, almost everybody is here as a
122+
passionate volunteer.
123+
</p>
124+
<h3
125+
class="font-heading text-secondary-afghani-blue mt-4 text-3xl font-bold"
126+
>
127+
Governance Constitution
128+
</h3>
129+
<p class="mb-2">
130+
The <a href="https://github.com/NixOS/org/blob/main/doc/constitution.md"
131+
>Nix Governance Constitution</a
132+
> describes each body's responsibilities, how the steering committee is elected,
133+
and how decisions are made inside the steering committee.
134+
</p>
135+
<h3
136+
class="font-heading text-secondary-afghani-blue mt-4 text-3xl font-bold"
137+
>
138+
Steering Committee Elections
139+
</h3>
140+
<p class="mb-2">
141+
Every year, the Nix community elects members to the steering committee.
142+
Members generally hold a two-year term, with elections held annually to
143+
fill at least half of the seats. You can read more about the election
144+
process in the <a
145+
href="https://github.com/NixOS/org/blob/main/doc/constitution.md"
146+
>Nix Governance Constitution</a
147+
>.
148+
</p>
149+
<p>
150+
The elections are documented in GitHub repositories under the <a
151+
href="https://github.com/NixOS">NixOS organization</a
152+
>.
153+
</p>
154+
<p>
155+
<b>Current and past elections:</b>
156+
<a href="https://github.com/NixOS/SC-election-2025">2025</a>, <a
157+
href="https://github.com/NixOS/SC-election-2024">2024</a
158+
>
159+
</p>
160+
</Container>
161+
<Divider mirrorY />
162+
<div
163+
class="bg-secondary-afghani-blue-45 text-primary-white py-8 font-extralight"
164+
>
165+
<Container class="space-y-2">
166+
<h2
167+
class="font-heading text-primary-white mt-4 text-4xl font-bold"
168+
id="community-values-intro"
169+
>
170+
Values
171+
<a href="#community-values-intro" class="text-lg">🔗</a>
172+
</h2>
173+
174+
<Quotation dark>
175+
<p>
176+
Communities form when different people unite around a common purpose.
177+
Shared values guide decision making, and community goals supersede
178+
individual interests and agendas.
179+
</p>
180+
181+
<p class="py-2 text-right italic">
182+
<a href="https://opensource.com/open-source-way" class="text-lg"
183+
>The Open Source Way</a
184+
>
185+
</p>
186+
</Quotation>
187+
188+
<p>
189+
Our common purpose is to develop, propagate, and promote the adoption of
190+
the <a href="https://edolstra.github.io/pubs/phd-thesis.pdf"
191+
>purely functional software deployment model</a
192+
>. Our values help us achieve this purpose by guiding decisionmaking
193+
across the community, keeping us moving in a common direction. This
194+
document captures our core values so that they can be shared and
195+
referenced by everyone in the community.
196+
</p>
197+
198+
<h3
199+
class="font-heading text-primary-white mt-4 text-3xl font-bold"
200+
id="community-values-whatis"
201+
>
202+
What is a value?
203+
<a href="#community-values-whatis" class="text-lg">🔗</a>
204+
</h3>
205+
206+
<p>
207+
Values are <span class="italic">not</span> a Code of Conduct, they do not
208+
define governance structures, and they do not provide specific policies. Instead,
209+
values inform the decisions we make about these things. A good test for <a
210+
href="https://medium.com/the-u-s-digital-service/our-values-1fc02b53598"
211+
>whether something is a value</a
212+
> is:
213+
</p>
214+
215+
<p>
216+
If a statement can be invoked by anyone in an organization, and cause a
217+
decision to be re-evaluated or changed, without regard to anyone’s rank
218+
or title, then you have a bona fide [i.e. genuine] value. If it doesn’t
219+
work that way, then it’s not a value.
220+
</p>
221+
222+
<p>
223+
To apply in many situations, values must be high-level, abstract
224+
concepts. Therefore, in the text below, each value is presented as a
225+
heading followed by an elaboration of its meaning. This is meant as a
226+
starting point for interpretation, not a comprehensive definition. The
227+
heading and the elaboration have equal importance.
228+
</p>
229+
<h3
230+
class="font-heading mt-4 text-3xl font-bold"
231+
id="community-values-values"
232+
>
233+
The values
234+
<a href="#community-values-values" class="text-lg">🔗</a>
235+
</h3>
236+
237+
<h4
238+
class="font-heading mt-4 text-2xl font-bold"
239+
id="community-values-respect"
240+
>
241+
Respect and civility
242+
<a href="#community-values-respect" class="text-lg">🔗</a>
243+
</h4>
244+
245+
<p>
246+
We treat each other with respect and civility. No matter one's
247+
individual identity, circumstances, level of contribution to the
248+
project, or status, everyone has the right to respect, and everyone has
249+
the duty to treat others with respect. We prioritise project health over
250+
individual interests. People with higher visibility within the project
251+
or towards the public are subject to higher expectations for their
252+
conduct.
253+
</p>
254+
255+
<h4
256+
class="font-heading mt-4 text-2xl font-bold"
257+
id="community-values-people"
258+
>
259+
People come first
260+
<a href="#community-values-people" class="text-lg">🔗</a>
261+
</h4>
262+
263+
<p>
264+
We are here, first and foremost, as individuals working together. Our
265+
priority here is to work on Nix projects for the benefit of all their
266+
contributors and users. We value building excellent software with a
267+
vibrant and diverse community. Individuals gain trust and status by
268+
doing the work. Organisations gain prestige by funding the work of
269+
individuals and providing resources to support the project.
270+
</p>
271+
272+
<h4
273+
class="font-heading mt-4 text-2xl font-bold"
274+
id="community-values-choice"
275+
>
276+
Free software and choice over lock-in
277+
<a href="#community-values-choice" class="text-lg">🔗</a>
278+
</h4>
279+
280+
<p>
281+
Nix projects are and will always remain <a
282+
href="https://www.gnu.org/philosophy/free-sw.en.html"
283+
class="text-primary-white">free software</a
284+
>. We value working together with the broader free software community.
285+
Free software is our priority, but we also support our users' needs to
286+
use non-free software, when practical.
287+
</p>
288+
289+
<h4
290+
class="font-heading mt-4 text-2xl font-bold"
291+
id="community-values-decisionmaking"
292+
>
293+
Distribute decisionmaking widely
294+
<a href="#community-values-decisionmaking" class="text-lg">🔗</a>
295+
</h4>
296+
297+
<p>
298+
We are a synthesis of varied but overlapping communities. We rely on
299+
distributed approaches: asynchronous communication, clear ownership,
300+
deep-dive taskforces, and local decisionmaking. We focus our attention
301+
on working together on our shared goals and working separately in a
302+
non-interfering way when our goals are independent. We build trust
303+
primarily by working together on Nix projects.
304+
</p>
305+
306+
<h4
307+
class="font-heading mt-4 text-2xl font-bold"
308+
id="community-values-automation"
309+
>
310+
Automation over process and toil
311+
<a href="#community-values-automation" class="text-lg">🔗</a>
312+
<Citation id={1} onBlueBackground>
313+
<a
314+
href="https://web.archive.org/web/20240717145635/https://sre.google/sre-book/eliminating-toil/"
315+
>Toil</a
316+
> is work that tends to be manual, repetitive, automatable, interrupt-driven,
317+
devoid of enduring value, and scaling linearly with growth.
318+
</Citation>
319+
</h4>
320+
321+
<p>
322+
We are a global community, and disseminating information and maintaining
323+
processes can be difficult. We are also a large project with a lot of
324+
hard and repetitive work. Therefore, we value automation over toil,
325+
while recognizing that not all toil can be automated. Automation reduces
326+
toil, but people are still accountable. Adding new toil needs a very
327+
strong justification. We build automation and processes that make the
328+
best use of our contributors' limited time and energy.
329+
</p>
330+
331+
<h4
332+
class="font-heading mt-4 text-2xl font-bold"
333+
id="community-values-stability"
334+
>
335+
Stable evolution over stagnation or chaos
336+
<a href="#community-values-stability" class="text-lg">🔗</a>
337+
</h4>
338+
339+
<p>
340+
Openness to new ideas and evolution is part of what made Nix great. We
341+
continue to foster that evolution while encouraging development of
342+
re-usable building blocks and well-defined, stable interfaces. We value
343+
experimenting with designs and concepts, and folding successful
344+
experiments back into continuous improvement for stable components. The
345+
larger the impact an action has, the more care and discussion is
346+
warranted before taking the action. Our leaders have a duty to find,
347+
support, and promote new contributors — and eventually step aside for
348+
new leaders.
349+
</p>
350+
</Container>
351+
</div>
352+
</Layout>
353+
354+
<style>
355+
@reference "./../styles/base.css";
356+
357+
.bg-secondary-afghani-blue-45 a {
358+
@apply hover:text-primary-black-75 text-primary-white;
359+
}
360+
</style>

0 commit comments

Comments
 (0)