forked from ploum/lingi2401
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path4. community.html
423 lines (308 loc) · 10.3 KB
/
4. community.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
<!DOCTYPE html>
<html>
<head>
<title>LINGI2401 - 4. Community</title>
<meta charset="utf-8">
<style>
@import url(https://fonts.googleapis.com/css?family=Yanone+Kaffeesatz);
@import url(https://fonts.googleapis.com/css?family=Droid+Serif:400,700,400italic);
@import url(https://fonts.googleapis.com/css?family=Ubuntu+Mono:400,700,400italic);
body { font-family: 'Droid Serif'; }
h1, h2, h3 {
font-family: 'Yanone Kaffeesatz';
font-weight: normal;
}
.remark-code, .remark-inline-code { font-family: 'Ubuntu Mono'; }
</style>
</head>
<body>
<textarea id="source">
class: center, middle
# LINGI 2401 : Open Source strategy for software development
Lionel Dricot
@ploum - @[email protected]
???
---
class: center, middle
# One thing you learned from last week
???
Everybody should have a different one
---
class: center, middle
#Calendar
- November 12th : Anthony Lessuisse, Odoo
- November 26th : Damien Van Achter, Open Journalism
---
class: center, middle
#Summary so far
Free software is a philosophical concept which has been translated in a legal world (licenses) and an economic world (business models). But what about technical (code) and humans (communities)?
---
class: center, middle
#Your open source project
- A scope
- A name
- A list of features for the roadmap
---
class: center, middle
#Your open source project
- A scope
- A name
- A list of features for the roadmap
- The very first feature of the first release
---
class: center, middle
#The code
???
Every FLOSS project, is by definition, centered around the code. The goal of the project is to produce some code. Which is not to say that some other kind of project does not exist but it might be for another time.
---
class: center, middle
#One question
"Should this modification be part of the code or not?"
---
class: center, middle
#Generalisation
"Every human institution has one single goal: take decisions in the name of multiple individuals"
???
Our parliament decide "should this modification be part of the law?"
---
class: center, middle
#Historical code management
- Contributors send patches by mail (even snail mails) and the maintainer merge it.
- Dictatorship by the maintainer (which might be good)
- Linux was maintained that way until 2002
- Lot of proprietary softwares still work that way in the industry
---
class: center, middle
#First generation Revision control system
- RCS, SCCS
- One file at a time (lock)
---
class: center, middle
# Second generation revision control system
- CVS (1990), SVN (2000)
- Merge before commit
- Centralized
???
Centralised. User need an account to commit. You cannot do anything locally. Big commits. Branches only for existing developpers.
---
class: center, middle
#Distributed Version Control System (2005)
- Mercurial, Bazaar, Git
- Commit before merge
- Decentralized
???
Everybody can work on its own branch
---
class: center, middle
#Bazaar (bzr)
- Complicate history of GNU tla, baz, bazaar-ng
- Current version started in 2005
- Written in Python, easy to use but slow with big files.
- GNU project maintained by Canonical
- Started to die in 2012-2013
---
class: center, middle
#Git (started in 2005)
- Take Concurrent Versions System (CVS) as an example of what not to do; if in doubt, make the exact opposite decision
- Support a distributed, BitKeeper-like workflow
- Include very strong safeguards against corruption, either accidental or malicious
- Written as a filesystem, not a version control system
- Was very complex to use but very fast.
???
Guess who wrote it
---
class: center, middle
> > The name "git" was given by Linus Torvalds when he wrote the very first version. He described the tool as "the stupid content tracker" and the name as (depending on your way):
>>
>> - random three-letter combination that is pronounceable, and not actually used by any common UNIX command. The fact that it is a mispronunciation of "get" may or may not be relevant.
>> - stupid. contemptible and despicable. simple. Take your pick from the dictionary of slang.
>> - "global information tracker": you're in a good mood, and it actually works for you. Angels sing, and a light suddenly fills the room.
>> - "g*dd*mn idiotic truckload of sh*t": when it breaks
---
class: center, middle
#Mercurial (hg)
- Started at the same time as git
- With the same requirement
- Git vs Hg is the new Vim vs Emacs
- Used by Facebook and Mozilla
---
class: center, middle
#Interfaces to DVCS
- Launchpad (bazaar)
- Github (proprietary!)
- Gitlab
- Bitbucket (mercurial, git since 2011)
- Gitorious (now closed)
- Keybase : encrypted end-2-end git repositories
- …
???
Many others: https://en.wikipedia.org/wiki/Comparison_of_source_code_hosting_facilities
---
class: center, middle
#Not everything is code
- Need for a way to communicate
- Project management
- A way to store what is not code
---
class: center, middle
#Communication channels
- Mailing-lists (mailman)
- IRC
- Forum
- XMPP chatrooms (Jabber)
- Now Slack (proprietary)
- Keybase (it's new!)
- Free slack clones: Rocket Chat, Mattermost, …
---
class: center, middle
#Project management through bug trackers
- Bugzilla
- Launchpad
- Github
- JIRA
- many others…
???
Funny thing: bugzilla is now hosted on github!
---
class: center, middle
#Bugtracking is a key to an healthy project
- Know the bug tracker health
- Know who are the bug triagers
- Know the bugtracking conventions
???
Lot of discussions happen there
---
class: center, middle
#Documentation, marketing, …
- Static websites
- CMS
- Wiki
???
First wiki in 95 but the concept becomes really popular around 2000-2002. It's a great tool to gather collective intelligence.
---
class: center, middle
#Taking decisions
- About the code to merge
- About when and what to release
- About the features and the roadmap
- About the evolution of the project as a whole.
---
class: center, middle
#Merging code
- It always boiled down to one person doing the merge
- Github allows a more collaborative approach
- git blame
---
class: center, middle
#Release management
- The release manager might not be a coder
- Ensuring that the planned features are tested and bug tracker under control
- Coordination with the documentation and translation teams
- Bundling everything as packages
- Writing release notes (with screenshots)
- Coordination with the marketing team
---
class: center, middle
#Release strategies
- Release often, release early
- Release when it's ready (Debian) : numbers
- Release at a fixed schedule (Ubuntu) : dates
- Nightly, Alpha, Beta, Interface freeze, String freeze, Release Candidate, Release, Minor releases.
???
With fixed schedules, the numbers looses their meaning (GNOME, Firefox, Chrome), except when it's the date, like Ubuntu.
Nightly are build directly from the trunk. They can be unstable. Historically, trunk was unstable then there was a "freeze" date to stabilise and fix bugs. Nowadays, a good practice is that the trunk should always be usable. Unstable development should happen in branches. This has been made possible thanks to Git. It was harder to do with a centralised approach like SVN.
When a project has the trunk unstable and dev cannot fix it quickly, it is said to be "dev hell" where you can't really accept new features before solving all the other problems or you risk to make it even more complex to fix.
---
class: center, middle
#Taking decisions
- One man (dictatorship)
- Committees, boards, …
- Community driven
- Vote for issues on the bugtracker
---
class: center, middle
#Meritocracy
"Every open source project is a meritocracy where most decisions are taken by a small minority. That minority has gained the power to take decision through its recognized work. That minority has the power to make the project appear as community driven by listening to ideas and recommendations."
---
class: center, middle
#Dictatorship
- Linux : Linus Torvalds
- Ubuntu : Mark Shuttleworth (sabdfl)
???
self-appointed benevolent dictator for life
---
class: center, middle
#Trolls
---
class: center, middle
#Bicycle sheding
---
class: center, middle
![image](https://github.com/ploum/lingi2401/raw/master/images/userlinux.jpg)
???
UserLinux story
---
class: center, middle
#Fork
- Openoffice -> Libreoffice
- B2 -> Wordpress
- Sodipodi -> Inkscape
- NetBSD -> OpenBSD
???
Also, sometimes projects merge. It's not all about forks.
https://fr.wikipedia.org/wiki/Fork_(d%C3%A9veloppement_logiciel)
---
class: center, middle
#Is this a fork?
- Debian -> Ubuntu
---
class: center, middle
#How to explore a project?
- Who are the people taking the decisions? (usually, the core commiters)
- What are the main communication channels? (are the deciders available on it?)
- What's the vision for the near future?
- What are the current challenges?
---
class: center, middle
#How to contribute to a project?
- Start with the bug tracker: what are the "easy issues"
- Present yourself on the communication channel, ask for suggestions to "start to play with the code"
- Build the code and use your own build!
- Have a motivation: "In the end, I want to bring to this project this and that!"
- Identify controversial issues and widely discussed issues in the bug trackers
---
class: center, middle
#Bug triaging
- Find bugs that have been unanswered by developers
- Try to reproduce them. Put yourself in the shoes of the developer.
- Add any information that could help the developer.
- If you can't reproduce, ask the initial reporter for more information (usually, there's a template)
- Use tags and/or ping appropriately. Mark duplicates.
---
class: center, middle
#Documentation
- Look at the current documentation. If there's none, ask the preferred way to start one.
- Put yourself in the shoes of a new user. Write down what is not clear in the documentation.
- Take screenshots using the development version if the interface is frozen.
---
class: center, middle
#Take part in the life of the project
- Maintain the website
- Organise/participate in AFK events
- Help with merchandising
- Write blog posts, share on social medias
- Give conferences, make presentations in local events
- Become a local point of contact
---
class: center, middle
# Discussion time
</textarea>
<script src="https://remarkjs.com/downloads/remark-latest.min.js">
</script>
<script>
var slideshow = remark.create();
</script>
</body>
</html>