summaryrefslogtreecommitdiff
path: root/2004/relation-community-lb2004/notes
blob: 4d2b2d370da8c14c807de8fb54164f67164fab76 (plain)
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
- free software community
	- definition of free software
		- requires source code access
		- everybody can make modifications
		- everybody can redistribute
	- diverse
		- any individual can contribute
		- no formal membership
	- international
		- the internet boosted free software development
		- very common to have developers from all continents in one project

	- development process
		- rough concensus and running code
		- decisions made by technical most skilled people
		- reputation-based
			- important to have good reputation as business
		- direct communication between developers, no manager-meets-manager situation
			- email
			- mailing lists
		- not driven by size of a target market (yes, I'm running GNU/Linux on Apple/PPC and Sun/Ultrasparc hardware, of course!)
		- release often, release early

	- people / groups involved
		- depends on size of project
		- small projects often one-man show
		- bigger projects have groups/subgroups
			- maintainer
			- core team / steering committee
			- subsystem maintainers
			- developer community
			- user community

	- motivations for developers to participate
		- gaining development experience
		- solving problems they encounter on their systems
		- fighting for free software as ideology (religion?)
		- gaining reputation (much like scientific community)
		- work in a creative environment with skilled people and no managers ;)
	- FOSS community likes
		- generic solutions
		- portable code
		- vendor-indepent architecture
		- clean code (coding style!)
		- open standards
		- technical documentation
			(remember the times where a 9-dot-matrix printer came with 300pages of documentation?)
		- raw hardware, no bundle of hardware and application sold as solution
	- FOSS community dislikes
		- monopolistic structures
			- intel-centrism
		- closed 'industry forums' with rediculous fees
			- Infiniband
			- SD Card Association
		- standard documents that cost redicolous fees
			- see above
		- NDA's, if they prevent free software
		- solutions, like 'e-mail buttons' at scanners

	- weak points
		- often way behind schedule (if there is any)
		- always too late (development starts when there is a need, rather when marketing predicts a requirement)
		- often a lack of (good) documentation
		- strong in infrastructure (operating system, networking), but weak in end-user apps

practical issues:

- modification to existing project _need to be submitted upstream_
	- if you develop something out of tree, you create a fork
	- development of your upstream tree proceeds at high speed
	- at some point, they can get too out-of-sync to make an easy merge
	- submission may be rejected in first round
		- cleanups needed, coordination with upstream project
		- code finally gets included
	- no further maintainance, kernel developers will modify it in case
	  API's change

- binary-only linux applications / drivers DON'T COUNT!
	- you will never cover all platforms
		- different cpu architecture / endianness
		- different kernel versions
		- different distibutions
		- different library environment
		- what about FreeBSD, OpenBSD, NetBSD, and all the other free OS's?
	- the community lives by source code modification
	- either publish source code or documentation, but no binary crap

- offload at least part of your support to the community
	- have support staff use public mailinglist where 


- much more communication
	- it's not a producer/consumer model, but cooperative!
	- you don't have to work 
	- before you start implementation, talk to project maintainers
		- it's likely that someone has tried a similar thing before
		- it's likely that project maintainers have already an idea how to implement your feature
		- avoid hazzles when later merging the code back upstream
	- if there is a standard interface, use it instead of inventing your own
	- if the standard interface is insufficient, you can actually change the API, rather than working around it

- show your support for the community
	- by visibly contributing to the project (discussion on lists, code, ..)
	- by funding developer meetings
	- by making cheap hardware offers for developers
	- by contracting or even hiring developers from the community

personal git repositories of Harald Welte. Your mileage may vary