Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Open Source Stewardship

Open Source Stewardship

Stewardship is an old word. It means taking on the responsibilities that come with ownership, with an ethic of public service. This is vital to open source, which, as a gift economy, is sustained and enlivened by the generosity of individuals sharing their knowledge and their time. This talk will look at what it means to be a steward in open source, in practical terms, from creation to maintenance to sunsetting. In doing so, open source consumers and contributors alike will be able to be successful, responsible members of the community.

This talk was presented at NSNorth, on May 10, 2014.


Mattt Thompson

May 10, 2014

More Decks by Mattt Thompson

Other Decks in Programming


  1. Open Source Stewardship A talk about how to build the

    best version of your software
  2. Stewardship is an old word

  3. Stewardship (n.) An ethic that embodies the responsible planning and

    management of resources. Old English: stiward, stigweard "house guardian, housekeeper," from stig "hall, pen for cattle, part of a house"
  4. None
  5. What's the use of an old word in this brave

    new world?
  6. ISO 20121 Event Sustainability Management System Requirements with guidance for

    use; ❡3.20: "Responsibility for sustainable development shared by all those whose actions affect environmental performance, economic activity, and social progress, reflected as both a value and a practice by individuals, organisations, communities, and competent authorities."
  7. Gift Economy

  8. None
  9. Commodity vs. Gift Exchange "Gifts and Commodities" (1982), by Chris

    Gregory — immediate vs. delayed exchange — alienable vs. inaliable goods — indepedent vs. dependent actors — quantitative vs. qualitative relationships — between objects vs. people
  10. None
  11. Gift Economies create a virtuous cycle

  12. $ whoami - AFNetworking - Nomad CLI - Postgres.app -

    Induction.app - Helios - Ono - TTTAttributedLabel - FormatterKit - TransformerKit - InflectorKit - CargoBay - GroundControl - SkyLab - Orbiter - ...
  13. That Doesn't Matter

  14. This talk is as much aspirational as it is (hopefully)

    instructive. I could be so, so much better at this. I want to be so much better at this. I hope we can get there together.
  15. How to Be a Steward of Open Source

  16. Every Project Has a Lifecycle - Creating - Maintaining -

  17. Creating

  18. Minimum Viable Project - README - Screenshot - Example Project

    - License - Means of Distribution
  19. README

  20. What's in a README? — A short introduction — A

    section describing the basic usage — A list of requirements and instructions on how to install the project — Links to documentation and resources for additional information — Contact information for the creator — A quick statement about licensing
  21. Screenshot

  22. A screenshot is worth 1000 seconds

  23. None
  24. Example Project

  25. (Insert Example)

  26. s t r e t c h Your Code -

    Static Analyzer - Automated Unit Tests - Complete Examples - Use in Production Applications
  27. License

  28. Good fences make good neighbors

  29. Popular Objective-C Open Source Licenses — MIT — Apache 2.0

    — BSD — zlib
  30. tl;dr MIT License Can — Commercial Use — Private Use

    — Modify — Distribute — Sublicense
  31. tl;dr MIT License Cannot — Hold Liable

  32. tl;dr MIT License Must — Include Copyright — Include License

  33. Distribution

  34. None
  35. NSHipsterKit.podspec Pod::Spec.new do |s| s.name = 'NSHipsterKit' s.version = '1.0.0'

    s.license = 'MIT' s.summary = "A pretty obscure library. You've probably never heard of it." s.homepage = 'http://nshipster.com' s.authors = { 'Mattt Thompson' => 'mattt@nshipster.com' } s.source = { :git => 'https://github.com/nshipster/NSHipsterKit.git', :tag => '1.0.0' } s.source_files = 'NSHipsterKit' end
  36. $ pod push

  37. 4779 Libraries Currently available through CocoaPods

  38. $ pod install

  39. Maintaining

  40. Maintaining - Responding to Issues - Answering Questions - Versioning

  41. Responding to Issues

  42. None
  43. You know you've made it when you're writing more on

    GitHub than in Xcode
  44. :(

  45. Answering Questions

  46. Each question is a data point for what's confusing about

    your software
  47. None
  48. None
  49. None
  50. None
  51. ...

  52. Versioning

  53. Semantic Versioning major . minor . patch

  54. Semantic Versioning Guidelines http://semver.org — MAJOR version when you make

    incompatible API changes, — MINOR version when you add functionality in a backwards-compatible manner, and — PATCH version when you make backwards-compatible bug fixes.
  55. How often to bump?

  56. Transitioning

  57. Transitioning - Delegating - Recruiting - Sunsetting

  58. Delegating

  59. Delegating is one of the hardest things to do. Period.

  60. @protocol OSSDelegate <Person> @property (getter = isEmpathetic) BOOL empathetic; -

    (void)communicateWithClass:(Class)always; - (void)take:(id)charge and:(id)responsibility; - (void)knowWhatThe:(id)bleep theyAreDoingWith:(id)domain; @optional - (BOOL)conformsToYourExactWayOfDoingThings; @end
  61. Recruiting

  62. Contributor today, maintainer tomorrow

  63. None
  64. Sunsetting

  65. None
  66. Without a graceful exit, a project is doomed to do

    more harm than good.
  67. Wrapping Up — Announce the end of the project, offering

    suggestions for how to migrate to another solution. — Keep the project around, but make a commit that removes source files from the master branch. (git will keep everything safe in history) — Thank everyone involved for their help and contributions.
  68. Wrapping Up

  69. We are in the midst of a Renaissance with Objective-C

    ...and it has as much to do with the language as it does with the community
  70. Responsibilities

  71. @mattt