惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

P
Privacy & Cybersecurity Law Blog
Engineering at Meta
Engineering at Meta
Forbes - Security
Forbes - Security
MongoDB | Blog
MongoDB | Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
A
About on SuperTechFans
量子位
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
雷峰网
雷峰网
腾讯CDC
P
Proofpoint News Feed
S
Schneier on Security
S
Secure Thoughts
V
Visual Studio Blog
Help Net Security
Help Net Security
The Hacker News
The Hacker News
C
Cyber Attacks, Cyber Crime and Cyber Security
P
Privacy International News Feed
SecWiki News
SecWiki News
S
SegmentFault 最新的问题
T
Threatpost
小众软件
小众软件
MyScale Blog
MyScale Blog
F
Fortinet All Blogs
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
P
Proofpoint News Feed
T
Tailwind CSS Blog
I
Intezer
C
CERT Recently Published Vulnerability Notes
U
Unit 42
V
V2EX
Cyberwarzone
Cyberwarzone
Recorded Future
Recorded Future
O
OpenAI News
Project Zero
Project Zero
有赞技术团队
有赞技术团队
Google DeepMind News
Google DeepMind News
Last Week in AI
Last Week in AI
Hugging Face - Blog
Hugging Face - Blog
Know Your Adversary
Know Your Adversary
C
Cybersecurity and Infrastructure Security Agency CISA
Scott Helme
Scott Helme
V2EX - 技术
V2EX - 技术
博客园 - 叶小钗
S
Securelist
A
Arctic Wolf
The Cloudflare Blog
W
WeLiveSecurity
T
Threat Research - Cisco Blogs
博客园 - Franky

Secret Weblog

Becoming More Xee: A Modern XPath and XSLT Engine in Rust Looking for new challenges! Repeat Yourself, A Bit The Curious Case of Quentell The Humble For Loop in Rust The Humble For Loop in JavaScript Don Question Best Practices I Was a 1980s Teenage Programmer Part 5: Achieving Assembly I Was a 1980s Teenage Programmer Part 4: The Call of Assembly The Tooling Shift I Was a 1980s Teenage Programmer Part 3: MSX-2 JavaScript: when you need two ways to do it! Empowering Programming Languages Bloat and Retrofuturism Refreshing my Blog Again Random Rust Impressions Apilar: An Alife System I Was a 1980s Teenage Programmer Part 2: Olivetti M24 I Was a 1980s Teenage Programmer: the Alphatronic SolidJS fits my brain Is premature optimization the root of all evil? Framework Patterns: JavaScript edition Roll Your Own Frameworks Framework Patterns Secret Weblog Highlights Refactoring to Multiple Exit Points mstform: a form library for mobx-state-tree Seven Years: A Very Personal History of the Web Morepath 0.16 released! Is Morepath Fast Yet? Introducing Bob Strongpinion Punctuated Equilibrium in Software Morepath 0.15 released! Impressions of React Europe 2016 Morepath 0.14 released! Morepath 0.13 now with Dectate Dectate: advanced configuration for Python code JavaScript Dependencies Revisited: An Example Project The Incredible Drifting Cyber A Brief History of Reselect The Emerging GraphQL Python stack Thoughts about React Europe Build a better batching UI with Morepath and Jinja2 GraphQL and REST Server Templating in Morepath 0.10 10 reasons to check out the Morepath web framework in 2015 A Review of the Web and how Morepath fits in Morepath 0.9 released! Better REST with Morepath 0.8 Morepath 0.7: new inter-app linking They say something I don Life at the Boundaries: Conversion and Validation BowerStatic 0.4 released! Morepath 0.6 released! Morepath 0.5(.1) and friends released! New HTTP 1.1 RFCs versus WSGI Against On Naming In Open Source My visit to EuroPython 2014 Morepath 0.4.1 released (with Python 3 fixes) Morepath 0.4 and breaking changes Announcing BowerStatic Morepath 0.3 released! Morepath 0.2 Morepath Python 3 support The Call of Python 2.8 Morepath 0.1 released! WebOb and Werkzeug compared Morepath: from Werkzeug to WebOb Racing the Morepath: SQLAlchemy Integration The Centre Cannot Hold Breaking Morepath Changes Morepath Update How to do REST with Morepath Morepath Security the Gravity of Python 2 #python2.8 discussion channel on freenode Alex Gaynor on Python 3 Morepath Documentation Starting to Take Shape Back to the Center Morepath App Reuse Implementing Grok Grok: the Idea Why Linux Works for Me On the Morepath Reg, Now With More Generic! The New Zope as a Web Framework Jim Fulton, Zope Architect Renewing Zope Object Publishing The Weirdness of Zope The Rise of Zope My Exit from Zope Reg: Component Architecture Reimagined JSConf EU 2013 impressions Obviel 1.0! JS Dependency Tools Redux Succinct data structures
Balancing stability and innovation in open source
Martijn Faassen · 2009-12-17 · via Secret Weblog

A good open source community should have a good developer and user support infrastructure. It should have things such as:

  • releases that are recent enough to be useful
  • up to date and helpful documentation
  • a good web site
  • a helpful and active mailing list
  • automated tests
  • well maintained change notes
  • well managed issue tracker
  • well managed version control system

and so on. These are very important. Most open source communities probably feel they can do a lot better in some of the areas above.

All that is necessary and important, but it isn't enough.

A living, functional open source community should also have vision. It should support an atmosphere of ideas. Not just small ideas, but also some bigger ideas, that affect the very core of the project and everyone that uses it.

A community shouldn't only be in maintenance mode with improvements taking place in the periphery, or only in matters where consensus can easily be reached. A community should also be able to innovate in areas where consensus is difficult, because sometimes that is necessary in order to move forward.

Innovation is much easier in a smaller, younger community. In a larger, more mature community it is easy to forget about innovation because there is so much more focus on maintenance and stability. In such a community, innovations will need to be more incremental in order to safeguard stability. Incremental improvements can add up, however - evolution can be very innovative. A living, functional community can aim improvements in directions where they do add up.

A innovative community should have the following qualities:

  • creative energy. There should be people who come up with ideas, preferably based on experience. There should be people who are not satisfied with the status quo and are willing to do something about it. These ideas shouldn't be just be in the periphery but also about core aspects of the project.
  • supportive atmosphere: Creative energy should be channeled positively, not dispersed. A community should have an atmosphere where new ideas can be discussed and not just always be rejected or worse, ignored. Discussions should aim to refine ideas or offer alternative approaches.
  • process: The community should have clear mechanisms in place that can help lead a discussion to a conclusion that can be accepted by the community.
  • leadership: A process is important but not sufficient. In order to make the process work, the community should have people who are able to lead the process to conclusions.
  • implementers: people who actually go and implement the idea. Without them, it all stays with a discussion and the community is ultimately inert.

A living open source community shouldn't discourage fundamental innovations because the support infrastructure isn't right yet. It will never be perfect - this is another way in which perfection can be the enemy of the good. The community should support improvements to the support infrastructure and allow innovation at the same time. A great quality of open source communities is that people can work in parallel.

It is often possible to do both at the same time: innovate and as a side effect also improve the support infrastructure of the project, such as documentation. The community should have a culture where innovations go hand in hand with improvements to the support infrastructure that this innovation touches, such as documentation.

To conclude: in open source communities, a healthy balance between stability and innovation needs to be maintained. We should not lose sight of one by focusing too much on the other.

P.S. I just realized that it is possible to interpret this post as an argument against Python's PEP 3003, the "Python Language Moratorium". It wasn't intended as such; I'm very much in favor of this moratorium. The Python development community is a mature community where innovation on the language level has certainly not been lacking. The moratorium on language changes helps in the important area of stability, and also helps refocus innovation on areas that do need improvement more, such as the interpreter, libraries and the packaging infrastructure.