<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>Open Tech Strategies | Blog - Posts</title><link href="https://blog.opentechstrategies.com/" rel="alternate"></link><link href="https://blog.opentechstrategies.com/feeds/posts.atom.xml" rel="self"></link><id>https://blog.opentechstrategies.com/</id><updated>2023-05-19T00:00:00-04:00</updated><subtitle>Maximum return from your open source investments.</subtitle><entry><title>Open Sourcing Checklist</title><link href="https://blog.opentechstrategies.com/2023/05/open-sourcing-checklist/" rel="alternate"></link><published>2023-05-19T00:00:00-04:00</published><updated>2023-05-19T00:00:00-04:00</updated><author><name>James Vasile</name></author><id>tag:blog.opentechstrategies.com,2023-05-19:/2023/05/open-sourcing-checklist/</id><summary type="html">&lt;p&gt;Taking an existing, non-open codebase into the open is one of those tasks that seems relatively simple --- apply open source license and publish the code.  In practice, however, there is some hidden complexity along the way, and many projects start out with the best of intentions but fail to complete …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Taking an existing, non-open codebase into the open is one of those tasks that seems relatively simple --- apply open source license and publish the code.  In practice, however, there is some hidden complexity along the way, and many projects start out with the best of intentions but fail to complete the process.&lt;/p&gt;
&lt;p&gt;This, of course, is why we always advise people to &lt;a href="/2018/09/be-open-from-day-one/"&gt;be open from day one&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://twitter.com/jamesvasile/status/1410241468833406986"&gt;
&lt;img alt="&amp;quot;Write a horror story for your industry using just four words.&amp;quot;  &amp;quot;We'll open source it later&amp;quot;  Text is from a Twitter screenshot at https://twitter.com/jamesvasile/status/1410241468833406986" src="/uploads/2023/05/we will open source it later.png"&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This document is a checklist of steps you might take before you finally publish your work under open source license.  Most steps are optional, but all of them have value.  Think of them as best practices, not mandatory requirements.  Consider each step and whether it applies to your project.  Then narrow the checklist to the steps you will take.  Feel free to do these in any order that makes sense to you.  Good luck, and please ping us at info AT opentechstrategies.com if we can help.&lt;/p&gt;
&lt;p&gt;This document is not an exhaustive list of concerns you should consider when
open sourcing.  It doesn't go into the reasons why you are considering open
source (and we have found that going open without a clear goal in mind usually
fails to achieve any goals at all).  It doesn't include building a community or
a sustainability model (open source is not, in and of itself, a business model).
All of those are considerations of a much bigger picture than this checklist
contemplates.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;[ ] Get internal buy-in.&lt;/strong&gt;  Taking code into the open can be a big deal.  It
can disturb existing strategies or revenue streams.  Often, publishing code is
the right answer overall, but might impose tradeoffs that impact some
stakeholders more than others.  Some of those stakeholders might become net
losers.  Make sure you start the process of obtaining the necessary buy-in
from internal stakeholders early.  Secure support all the way up the org-chart
if you can.  This is the step that at first seems doable or even easy but
ultimately blocks so many projects from ever going open.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;[ ] Get legal buy-in.&lt;/strong&gt; Let your counsel know you're moving in this direction.
Make sure you know what their requirements are to sign off on publishing under
an open source license.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;[ ] Ensure regulatory compliance.&lt;/strong&gt;  Check to make sure you're square with
export control regulations regarding encryption.  If you're just using
commonly-used open source encryption libraries, you are probably fine.
Depending on what your software does, other regulatory rules might apply.  Find
out and get in compliance.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;[ ] Check your copyrights.&lt;/strong&gt;  Ensure you have the needed permissions to
release your project under open license.  These permissions could come from
licenses or copyright ownership. Do not assume you have the rights. Go look. Do
an audit.  If necessary, read up on works for hire and federal ownership of
copyright.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;[ ] Consider your patent portfolio.&lt;/strong&gt;  FOSS licenses sometimes include patent permissions, whether explicitly stated or implicitly granted.  If you or your contributors hold patents, you should evaluate the impact of open licensing on your patent rights.  You might decide your patents are best used to nurture your open source strategy.  Alternatively, you might want to take steps to protect your patents.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;[ ] Pick an outbound license.&lt;/strong&gt;  Usually this will be BSD, Apache, or some flavor of GPL, but there is a wide range of &lt;a href="https://opensource.org/licenses/"&gt;FOSS licenses&lt;/a&gt; out there for you to choose from.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;[ ] Consider an inbound license.&lt;/strong&gt;  Sometimes these licenses are called
"contributor license agreements".  By default, a project usually takes code
under an inbound license that is equal to their outbound license.  If that
outbound license gives the project all the rights it needs for the foreseeable
future, that's good enough. If it doesn't, you might consider a contributor
license agreement.  Project Harmony has some &lt;a href="https://harmonyagreements.org/"&gt;sample
agreements&lt;/a&gt; that are old but worth reading (full
disclosure: James Vasile worked on that project).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;[ ] Ensure license compatibility with dependencies.&lt;/strong&gt;  Two pieces of software are license compatible when they can be combined into one work and released together without violating the licenses of either of the original pieces of software.  The combined work is then treated as goverend by only one of those two licenses, usually the less permissive license.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;[ ] Upload your code to an online repository.&lt;/strong&gt;  This will probably be a git
repository hosted on &lt;a href="https://github.com"&gt;GitHub&lt;/a&gt;, &lt;a href="https://code.librehq.com"&gt;LibreHQ&lt;/a&gt;, or a
&lt;a href="https://gitlab.com"&gt;GitLab&lt;/a&gt; instance.  &lt;em&gt;Do not make it public it yet.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;[ ] Add a README.md file.&lt;/strong&gt;  Place it in the root directory of your repository.  It should specify the name of the software and describe what it does in lay terms.  Include contact information, directions to your mailing list or Zulip/Slack /Discord instance, and your general level of willingness to accept public participation.  Provide basic instructions for installation or refer readers to online documentation.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;[ ] Test installation.&lt;/strong&gt;  Give repo access to a new user or developer who has never installed your software before.  Have them follow your instructions.  If they got a running installation, good.  If not, fix your instructions before you publish.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;[ ] Fix your test suite.&lt;/strong&gt;  Ensure your tests pass.  Sideline (e.g. mark "expected fail") those that don't.  New users will often run tests to make sure their install worked.  If the tests fail, it will be difficult for them to know whether that is because the install failed or because that test stopped passing and nobody cared.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;[ ] Add a LICENSE or COPYING file.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;[ ] Add a CONTRIBUTING file.&lt;/strong&gt;  This file tells people how to contribute.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;[ ] Prepare for public participation.&lt;/strong&gt;  Pay particular attention
to your planned cadence of replies to incoming interest.  Your approach to
inbound messages will, of course, depends on your community strategy, which is
beyond the scope of this checklist (see our &lt;a href="https://opentechstrategies.com/archetypes"&gt;Archetypes
Analysis&lt;/a&gt; and &lt;a href="https://producingoss.com/"&gt;Producing
OSS&lt;/a&gt; for starting points).  Document that approach in
your README or CONTRIBUTING file so people can form expectations about how
quickly you will respond to issues and PRs.  See&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;[ ] Add issue templates.&lt;/strong&gt;  These can help guide public participation.  Give people some hints about &lt;em&gt;where&lt;/em&gt; discussion of issues happens.  Typically, public projects default to the issue tracker, but some prefer the project's mailing list or forum.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;[ ] Examine ownership of your repository.&lt;/strong&gt;  Make sure multiple people have authority and actual ability to administer the repository.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;[ ] Squash history.&lt;/strong&gt;  Does your repository contain sensitive information or secrets?  Has it ever?  When repositories are private, people tend to be less guarded about what they check in to the repo.  Problematic content includes secrets and PII but also might include commit messages containing profanity or even defamatory content.  It is not practical for most projects to examine all their history, so many delete, edit, or squash history before going public.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;[ ] Remove secrets.&lt;/strong&gt; Ensure there are no API keys or passwords or other
sensitive information in the remaining codebase.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;[ ] Publish documentation.&lt;/strong&gt;  Centralize it into an accessible location under open source or creative commons license.  Documentation should be open to change requests.  Track down the design and usage documentation that may currently reside in various internal places and make them public.  Collect the implicit learnings of your team, and write them down so people without your experience can productively approach the software.&lt;/p&gt;
&lt;p&gt;Remember, this checklist is a general list of tasks, some of which might not
apply to you.  Adapt it to your specific needs and legal requirements.  Work
with your lawyer and your open source advisor to reduce this to the list that
works for you and your product.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Thanks to Karl Fogel, Frank Duncan, and Jesse Bickel for reading early drafts of
this checklist.&lt;/em&gt;&lt;/p&gt;</content><category term="Posts"></category></entry><entry><title>Moving Repositories Between Project Hosting Platforms</title><link href="https://blog.opentechstrategies.com/2023/01/moving-repositories-between-project-hosting-platforms/" rel="alternate"></link><published>2023-01-10T21:52:00-05:00</published><updated>2023-01-10T21:52:00-05:00</updated><author><name>James Vasile</name></author><id>tag:blog.opentechstrategies.com,2023-01-10:/2023/01/moving-repositories-between-project-hosting-platforms/</id><summary type="html">&lt;p&gt;No matter how tightly developers are committed to their
current project hosting provider (GitHub, GitLab, GNU Savannah, or
whatever), new ones will come along over time. The history of web
services is replete with turnover, and project hosting forges all
follow the inevitable trend. But the cost of migration is …&lt;/p&gt;</summary><content type="html">&lt;p&gt;No matter how tightly developers are committed to their
current project hosting provider (GitHub, GitLab, GNU Savannah, or
whatever), new ones will come along over time. The history of web
services is replete with turnover, and project hosting forges all
follow the inevitable trend. But the cost of migration is
formidable: It's quite easy to setup a new project host like
GitLab, but how do you move the whole structure of your team’s
code, branches, comments, issues, and merge requests into their new
home?&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="https://softwareheritage.org"&gt;Software Heritage&lt;/a&gt;, a non-profit with the mission of archiving free software code, faced this daunting challenge when they decided to move from Phabricator to the more vibrant GitLab. For a while, a lot of free and open source projects had found Phabricator appealing, but the forge had been gradually declining and officially ceased development in 2021.&lt;/p&gt;
&lt;p&gt;At OTS, we developed an open source tool and framework to
support migrating to a new project hosting platform. We used it to
move all of Software Heritage's projects from Phabricator to
GitLab, but the framework is robust enough to support migrations
between almost any project hosts.&lt;/p&gt;
&lt;p&gt;The tool is called &lt;a class="reference external" href="https://code.librehq.com/ots/forgerie"&gt;Forgerie&lt;/a&gt;. Its goal is to automate the migration of projects from one hosting system to
another. Forgerie is extendable to any source and destination. It
translates input from a project hosting platform into a
richly-featured internal format, then exports from that format to the
destination platform.&lt;/p&gt;
&lt;div class="wp-image-616 figure"&gt;
&lt;img alt="Diagram showing repo moving with intermediate representation" src="/uploads/2023/01/Diagram-with-IR.png" /&gt;
&lt;/div&gt;
&lt;p&gt;This is the same method used by many tools that perform n-to-n migrations. For instance, the health care field contains many incompatible electronic record systems, so migration tools usually create an intermediate format to cut down on the number of necessary format conversions.&lt;/p&gt;
&lt;p&gt;OTS continues to work on Forgerie as part of its offering of
migration services to clients. If you would like to use Forgerie,
please grab it
from &lt;a class="reference external" href="https://code.librehq.com/ots/forgerie"&gt;Forgerie's GitLab page&lt;/a&gt; or &lt;a class="reference external" href="https://opentechstrategies.com/#contact"&gt;contact us&lt;/a&gt; if you would like help with a migration.&lt;/p&gt;
&lt;p&gt;The rest of this post offers some technical background on
Forgerie. It should be of interest to anybody solving similar
project hosting problems or, more generally, to anybody working on
moving structured data into a new data store. Many migration
projects fall into the traditional category of Extract, Transform,
Load (ETL), but the richness of data stores today stretches the
category into new realms.&lt;/p&gt;
&lt;div class="section" id="forgerie"&gt;
&lt;h2&gt;Forgerie&lt;/h2&gt;
&lt;p&gt;The Forgerie code was initiated by OTS developer Frank Duncan and
released under the GNU Affero General Public License v3.0. This post
delves into the project goals along
with suggestions for the future of this project. We'll look at the
difficulties posed by this major migration project and how we
handled them. This story may offer lessons and tips to people
dealing with all kinds of data migration.&lt;/p&gt;
&lt;p&gt;If you have used a project hosting system, you might well be imagining
the massive requirements for even such a limited
project. Code in a forge exists in many branches, each created by
multiple commits and enhanced by merges. Numerous issues (change
requests) have been posted by different users, along with comments
that refer to the issues by number. Commit messages also link and refer to the
numbers of issues and branches.&lt;/p&gt;
&lt;div class="wp-image-607 figure"&gt;
&lt;img alt="Diagram showing repo moving without intermediate representation" src="/uploads/2023/01/Diagram-without-IR.png" style="width: 676px; height: 692px;" /&gt;
&lt;/div&gt;
&lt;div class="section" id="the-need-for-a-general-project-hosting-migration-tool"&gt;
&lt;h3&gt;The need for a general project hosting migration tool&lt;/h3&gt;
&lt;p&gt;Tools for importing projects exist for various project hosting
platforms, but they are limited. GitLab does a pretty good job
importing a repository from GitHub, and GitHub from GitLab, and both
allow the uploading of a private repository. Later in this article
we’ll examine one particular limitation of all these import tools:
handling multiple contributors.&lt;/p&gt;
&lt;p&gt;To automate the migration from Phabricator to GitLab, Software
Heritage contracted with Open Tech Strategies (OTS), a free and open
source software consulting firm. Preliminary research turned up a few
tools claiming to perform the migration, but none of them did a
complete job. And each migration tool works only with one particular
forge as input and another as destination. OTS decided to design its
new tool as a general converter that could be adapted to any source
and target repositories.&lt;/p&gt;
&lt;p&gt;Migration thus requires the automated tool to reproduce, on the
target forge, all the projects, branches, commits, merge requests,
merges issues, comments, and users recorded in the source
repository. If possible, contributors should be associated with their
contributions.&lt;/p&gt;
&lt;p&gt;OTS chose to create Forgerie in Common Lisp, which seems like an
odd choice in the 2020s. But Common Lisp is well-maintained and
robust. Its big advantage for the Forgerie project was that Lisp makes
database-to-dictionary conversions easy. Because Phabricator stores
data in a relational database, database-to-dictionary conversions were
the central task in automating the migration.&lt;/p&gt;
&lt;p&gt;The Forgerie project has three subdirectories: a set of core files used
by all migrations, egress files for Phabricator, and ingress files for
GitLab. This design leaves room for future developers to extend the
project by adding more ingress and egress options. In order to go from Phabricator to GitHub, for instance, a
maintainer can reuse the existing core and Phabricator
directories.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="impedance-mismatches-create-challenges"&gt;
&lt;h3&gt;Impedance mismatches create challenges&lt;/h3&gt;
&lt;p&gt;All forges offer basic version control features, along with
communication and management tools such as issues. But each forge is
also unique. In this case, Duncan had to decide how best toaccommodate
features that differ or are missing in the target GitLab platform.&lt;/p&gt;
&lt;p&gt;The biggest challenge Duncan faced is that GitLab maps projects to
repositories on a one-to-one basis, whereas Phabricator treats a
project as a higher-order concept.
A project in Phabricator can
contain multiple repositories, and a repository can be part of many
projects. Phabricator also supports multiple version control tools
(Git, Mercurial, etc.). Making Forgerie flexible enough to smooth over these types of differences in data structure was a key goal.&lt;/p&gt;
&lt;p&gt;The different approaches to projects introduced several
complications. First, Duncan had to make sure that each message and
ticket pointed to the right GitLab project.&lt;/p&gt;
&lt;p&gt;Merge requests were the hardest elements to migrate, because in
Phabricator a changeset can span multiple repositories. The
requirement that Duncan had to implement was to preserve the sequence
of events in the original forge strictly, so that issue 43 in the old
forge remains issue 43 in the new forge. That way, any email message
or comment referring to the issue still refers to the right one.&lt;/p&gt;
&lt;p&gt;Lots of details had to be tidied up. For instance, Phabricator has
its own markup language to add rich text to comments and issues. This
language had to be converted to Markdown to store the comments in
GitLab.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="the-question-of-multiple-contributors"&gt;
&lt;h3&gt;The question of multiple contributors&lt;/h3&gt;
&lt;p&gt;When there are many people to credit for their contributions, the
import tool has a tough nut to crack. Awarding credit properly is
crucial because many contributors rest their reputations on the record
provided by their contributions. Statistics about the number of
commits they made, the “stars” they got, etc. undergird their
strategies for employment and promotions. Losing that information
would also hurt the project by making it hard to trace changes back to
the responsible person.&lt;/p&gt;
&lt;p&gt;On the other hand, security concerns preclude allowing someone to import
material and attribute it to somebody else.&lt;/p&gt;
&lt;p&gt;GitLab solves this problem if the input repository is set up
right: The person doing the import needs master or admin access and
has to map contributors from the input repository to the destination
respository. If access rights don't allow the import to add material
to a contributor's repository, GitLab's import can accurately
attribute issues to the contributor, but not commits.&lt;/p&gt;
&lt;p&gt;Forgerie goes farther in preserving the provenance of contributors:
It keeps track of Phabricator users and creates a user in GitLab for
each user recorded in the Phabricator repository. The Software
Heritage project did not present difficulties because no contributor
had an account in GitLab. To be precise, the email address that
identified each Phabrictor contributor didn’t already exist for any
GitLab contributor. If GitLab had an account with the same email
address as an account being imported, the system would have issued an
error and prevented Forgerie from importing the contributor’s
commits.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="a-few-implementation-details"&gt;
&lt;h3&gt;A few implementation details&lt;/h3&gt;
&lt;p&gt;Forgerie carries out a migration by creating a log of everything
that happened in the source repository, and replaying the log in the
target forge. Phabricator uses a classic LAMP stack, storing all
repository information into a MySQL database. Forgerie queries this
database to retrieve each item in order, then invokes the GitLab API
to create the item there.&lt;/p&gt;
&lt;p&gt;The GitLab API is relatively slow for those particular types of
request, requiring one or two seconds for each request, and
repositories can contain tens of thousands of items when you count all
the merges, comments, etc. So you can expect a migration to take 24
hours or more.&lt;/p&gt;
&lt;p&gt;Long runs call for checkpoints and restarts. When Duncan designed
the simple version of Forgerie for him to run just once, he figured he
could just restart the run if it failed. Later he realized that
restarting after 23 hours became unacceptable.&lt;/p&gt;
&lt;p&gt;The log solves this problem through a kind of simple
transaction. You can conceive of the migration as moving through three
stages (Figure 1). In the first stage, items are in the old platform
but not the log. In the second stage, Forgerie adds the items to the
log. In the third stage, items are safely loaded into the destination
platform and can be removed from the log. Should the job fail, the
user can restart it from the beginning of the log.&lt;/p&gt;
&lt;div class="wp-image-602 figure"&gt;
&lt;img alt="Figure 1: Logging items as they move from source to destination platform." src="/uploads/2023/01/Diagram-with-Logs.png" /&gt;
&lt;p class="caption"&gt;Figure 1: Logging items as they move from source to destination platform.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;A classic issue with transactions arises with a log: Suppose an
item has just entered the target forge but Forgerie did not have a
chance to remove the item from the log before a failure. The item
exists in both the target repository and the log, so when Forgerie
starts up again, the item will be added a second time to
the repository. Forgerie developers do not have to worry about
this happening because the insertions are idempotent. The second
insertion overwrites the first with no corruption of
information.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="assessing-the-forgerie-project"&gt;
&lt;h3&gt;Assessing the Forgerie project&lt;/h3&gt;
&lt;p&gt;The Forgerie code base is surprisingly small–a total of 2,726 lines, divided as follows:&lt;/p&gt;
&lt;div class="aligncenter docutils container"&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Core (shared) code: 350 lines&lt;/li&gt;
&lt;li&gt;Phabricator-specific code: 1,233 lines&lt;/li&gt;
&lt;li&gt;GitLab-specific code: 1,143 lines&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;p&gt;No platform lives forever. Amazing as the capabilities of GitHub and
GitLab are—and they continue to evolve—there will come a time when developers decide they have to pick up and move their code to some glorious new way of working. Forgerie tries to make migration as painless as possible.&lt;/p&gt;
&lt;p&gt;Thanks to &lt;a class="reference external" href="https://praxagora.com/"&gt;Andy Oram&lt;/a&gt; for assistance drafting this post, to Jim McGowan for making the diagrams, and to Antoine R. Dumont of Software Heritage for contributing &lt;a class="reference external" href="https://code.librehq.com/ots/forgerie/-/merge_requests/1"&gt;technical improvements&lt;/a&gt; to the Forgerie project.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
</content><category term="Posts"></category><category term="phab2lab"></category></entry><entry><title>Be Open From Day One, Not Day N.</title><link href="https://blog.opentechstrategies.com/2018/09/be-open-from-day-one/" rel="alternate"></link><published>2018-09-05T16:40:00-04:00</published><updated>2018-09-05T16:40:00-04:00</updated><author><name>Karl Fogel</name></author><id>tag:blog.opentechstrategies.com,2018-09-05:/2018/09/be-open-from-day-one/</id><summary type="html">&lt;p&gt;Note: This is an updated version of an article I first wrote &lt;a class="reference external" href="http://archive.civiccommons.org/2011/01/be-open-from-day-one/"&gt;in 2011&lt;/a&gt;. The original site went offline for a while, and although it was later restored, thanks to heroic efforts by &lt;a class="reference external" href="http://phil.ashlock.us/"&gt;Philip Ashlock&lt;/a&gt;, I felt the article needed a new home, and wanted a chance to update it …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Note: This is an updated version of an article I first wrote &lt;a class="reference external" href="http://archive.civiccommons.org/2011/01/be-open-from-day-one/"&gt;in 2011&lt;/a&gt;. The original site went offline for a while, and although it was later restored, thanks to heroic efforts by &lt;a class="reference external" href="http://phil.ashlock.us/"&gt;Philip Ashlock&lt;/a&gt;, I felt the article needed a new home, and wanted a chance to update it anyway. This version also incorporates some suggestions from &lt;a class="reference external" href="https://esq.io/"&gt;V. David Zvenyach&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Over the years we've watched software projects of all sizes make the transition from closed-source to open source. The lesson we consistently draw from them is this:&lt;/p&gt;
&lt;p&gt;If you're running a software project and you plan to make it open source eventually, then just make it open source from the beginning of development.&lt;/p&gt;
&lt;p&gt;Waiting will only create more work.&lt;/p&gt;
&lt;p&gt;The longer a project is run in a closed-source mode, the harder it will be to open source later.&lt;/p&gt;
&lt;p&gt;(Note that being open source from the start doesn't force you to immediately take on the extra responsibility of community management. People often think that “open source” means “strangers distracting my programmers with questions”, but that's optional&amp;nbsp;—&amp;nbsp;it's something you might do down the road, if and when it makes sense for your project. It's under your control. )&lt;/p&gt;
&lt;p&gt;Projects seem to follow the rule pretty convincingly: the longer they run closed-source, the more difficult they are to open up later. Other people we've talked to have noticed the pattern too.&lt;/p&gt;
&lt;p&gt;Why does it seem to hold so consistently?&lt;/p&gt;
&lt;p&gt;I think there's one underlying cause:&lt;/p&gt;
&lt;p&gt;At each step in a project, programmers face a choice: to do that step in a manner compatible with the future open-sourcing, or do it in a manner not compatible with the future open-sourcing. Each time they choose the latter, the project gets just a little bit harder to open source.&lt;/p&gt;
&lt;p&gt;The crucial thing is, you can't help choosing the latter occasionally&amp;nbsp;—&amp;nbsp;all the pressures of development propel you that way. It's very difficult to give a future event the same present-day consequences as, say, fixing the incoming bugs reported by the testers, or finishing that feature the customer just added to the spec. Also, programmers struggling to stay on budget will inevitably cut corners here and there (that is, they will incur &lt;a class="reference external" href="https://en.wikipedia.org/wiki/Technical_debt"&gt;technical debt&lt;/a&gt;), with the intention of cleaning things up later.&lt;/p&gt;
&lt;p&gt;Thus when it's time to open source, you will suddenly find:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Customer-specific configurations and passwords checked into the code repository;&lt;/li&gt;
&lt;li&gt;Sample data constructed from live (and confidential) information;&lt;/li&gt;
&lt;li&gt;Bug reports containing sensitive information that cannot be made public;&lt;/li&gt;
&lt;li&gt;Comments in the code expressing perhaps overly-honest reactions to the customer's latest urgent request;&lt;/li&gt;
&lt;li&gt;Archives of correspondence among the developer team, in which useful technical information is interleaved with personal opinions not intended for strangers;&lt;/li&gt;
&lt;li&gt;Licensing issues with dependency libraries whose conditions might have been fine for internal deployment (or not even that), but aren't compatible with open source distribution;&lt;/li&gt;
&lt;li&gt;Documentation written in the wrong format (e.g., that proprietary internal wiki your department uses), with no easy translation tool available to get it into formats appropriate for public distribution;&lt;/li&gt;
&lt;li&gt;Non-portable build dependencies that only become apparent when you try to move the software out of your internal build environment;&lt;/li&gt;
&lt;li&gt;Modularity violations that everyone knows need cleaning up, but that there just hasn't been time to take care of yet;&lt;/li&gt;
&lt;li&gt;Need I go on? Do some of these sound familiar?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The problem isn't just the work of doing the cleanups; it's the extra decision-making they require. For example, if sensitive material was checked into the code repository in the past, your team now faces a choice between cleaning it out of the historical revisions entirely, so you can open source the entire (sanitized) history, or just cleaning up the latest revision and open-sourcing from that (sometimes called a “top-skim”). Neither method is wrong or right&amp;nbsp;—&amp;nbsp;and that's the problem: now you've got one more discussion to have and one more decision to make. In some projects, that decision gets made and reversed several times before the final release. The thrashing itself is part of the cost.&lt;/p&gt;
&lt;div class="section" id="waiting-causes-needless-infrastructure-adjustment-later"&gt;
&lt;h2&gt;Waiting Causes Needless Infrastructure Adjustment Later&lt;/h2&gt;
&lt;p&gt;Delaying open sourcing also causes you to risk incurring extra overhead later from switching collaboration tools in mid-stream. A project run behind closed doors inevitably starts to use some of the internal collaboration infrastructure of the organization&amp;nbsp;—&amp;nbsp;infrastructure that won't be available to other contributors later when the project open sources.&lt;/p&gt;
&lt;p&gt;Being open source from day one encourages you to take advantage of the robust ecosystem for open-source projects from day one instead: free project hosting, continuous-integration services that don't require paid membership if the project is open source, etc. Switching to these tools later, after your project is already under way, is a lot more work than just using them from the beginning.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="waiting-just-creates-an-exposure-event"&gt;
&lt;h2&gt;Waiting Just Creates an Exposure Event&lt;/h2&gt;
&lt;p&gt;Another problem with opening up a completed code base is that it creates a needlessly significant &lt;em&gt;exposure event&lt;/em&gt;. Whatever issues there may be in the code (modularity corner-cutting, security vulnerabilities, etc), they are all exposed to public scrutiny at once&amp;nbsp;—&amp;nbsp;the open-sourcing event becomes an opportunity for the technical blogosphere to pounce on the code and see what they can find.&lt;/p&gt;
&lt;p&gt;Contrast that with the scenario where development was done in the open from the beginning: code changes come in one at a time, so problems are handled as they come up (and are often caught sooner, since there are more eyeballs on the code). Because changes reach the public at a low, continuous rate of exposure, no one blames your development team for the occasional corner-cutting or flawed code checkin. Everyone's been there, after all; these tradeoffs are inevitable in real-world development. As long as the technical debt is properly recorded in FIXME comments and bug reports, and any security issues are addressed promptly, it's fine. Yet if those same issues were to appear suddenly all at once, unsympathetic observers might jump on the aggregate exposure in a way they never would have if the issues had come up piecemeal in the normal course of development.&lt;/p&gt;
&lt;p&gt;The importance of avoiding a needless exposure event is especially true for government projects, even more than for private-sector code. Elected officials and those who work for them are understandably sensitive to negative publicity, and are therefore risk-averse. Even if your team has been very conscientious, a worrying cloud of uncertainty will surround everything by the time you're ready to open up hitherto closed code. How can you ever know you've got it all cleaned up? You do your best, but you can never be totally sure some hawk-eyed hacker out there won't spot something embarrassing after the release. The team worries, and worry is an energy drain: it causes them to spend time chasing down ghosts, yet at the same time can cause them to unconsciously avoid constructive steps that might risk exposing real problems.&lt;/p&gt;
&lt;p&gt;(For private-sector code, there are sometimes competitive reasons to stay closed until the first release, even if the project is intended to be open source in the long run. This is not an exception to the advice given here, it is simply a countervailing factor that should be weighed along with every other strategic consideration related to the project. One temptation to be suspicious of, however, is the notion that creating an exposure event is actually desirable&amp;nbsp;—&amp;nbsp;that dramatically open sourcing the code can itself provide useful publicity. In almost all cases, the better way to achieve that publicity would be by announcing the software's “1.0” release later on. The feature set and product stability that that event represents is what users and partners actually care about, and that announcement gives potential contributors another natural moment to take interest, or renew their interest, in the open source code base.)&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="the-good-news"&gt;
&lt;h2&gt;The Good News&lt;/h2&gt;
&lt;p&gt;The good news is that these are all unforced errors. A project incurs little or no extra cost by avoiding them in the simplest way possible: by running the project in the open from Day One.&lt;/p&gt;
&lt;p&gt;“In the open” means the following things are publicly accessible, in standard formats, from the first day of the project: the code repository, bug tracker, design documents, user documentation, wiki (if any), and developer discussion forums. It also means the code and documentation are placed under an open source license, of course. It also means your team's day-to-day work takes place in the publicly visible area (except for sensitive configuration data and the like&amp;nbsp;—&amp;nbsp;that of course stays behind your firewall).&lt;/p&gt;
&lt;p&gt;“In the open” does &lt;em&gt;not&lt;/em&gt; have to mean: allowing strangers to check code into your repository (they're free to copy it into their own repository, if they want, and work with it there); allowing anyone to file bug reports in your tracker (you're free to choose your own QA process, and if allowing reports from strangers doesn't help you, you don't have to do it); reading and responding to every bug report filed, even if you do allow strangers to file; responding to every question people ask in the forums (even if you moderate them through); reviewing every patch or suggestion posted, when doing so may cost valuable development time; etc.&lt;/p&gt;
&lt;p&gt;Think of it this way: you open source your code, not your developers' time. One of those resources is infinite, the other is not. You'll have to determine whether engaging with outside users and developers makes sense for your project or not. In the long run it usually does, when done with care&amp;nbsp;—&amp;nbsp;&lt;a class="reference external" href="https://blog.mozilla.org/wp-content/uploads/2018/05/MZOTS_OS_Archetypes_report_ext_scr.pdf"&gt;different types of projects want different types of engagement&lt;/a&gt;. But the important thing is, it's all under your control. Developing in the open does not change the degree of control you have over the project, it just ensures that everything you do is, by definition, done in a way that's compatible with being open source. And you get that for free.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="open-source-helps-executive-and-stakeholders"&gt;
&lt;h2&gt;Open Source Helps Executive and Stakeholders&lt;/h2&gt;
&lt;p&gt;For executives and other stakeholders, early open-sourcing brings advantages too. The same collaboration tools used by the developers to coordinate work also provide visibility into that work for others. This is &lt;a class="reference external" href="https://www.thoughtworks.com/insights/blog/nuts-and-bolts-leading-agile-culture"&gt;described well&lt;/a&gt; by Vinod Sankaranarayanan at ThoughtWorks; although he is writing there from an Agile perspective, his points apply quite clearly to open source as well (which is not a coincidence&amp;nbsp;—&amp;nbsp;there has always been a lot of overlap between the two).&lt;/p&gt;
&lt;p&gt;Working in the open from day one also improves stakeholder trust through transparency. Rebecca Refoy-Sidibe of &lt;a class="reference external" href="https://18f.gsa.gov/"&gt;18F&lt;/a&gt; wrote about how they &lt;a class="reference external" href="https://18f.gsa.gov/2018/05/24/what-agencies-have-to-say-about-working-in-the-open/"&gt;polled the agencies they work with&lt;/a&gt;&amp;nbsp;—&amp;nbsp;that is, their customers&amp;nbsp;—&amp;nbsp;to find out how the experience was for them. Here's just one sample, from the Department of Justice:&lt;/p&gt;
&lt;blockquote&gt;
Department of Justice’s Office of Information Policy: The biggest benefit we saw from the open source approach was the active feedback, engagement, and buy-in from our public stakeholders. We had more confidence that what would be released to production would be of value because we had solicited and considered input from a diverse stakeholder group.&lt;/blockquote&gt;
&lt;/div&gt;
&lt;div class="section" id="open-sourcing-earlier-benefits-others-earlier"&gt;
&lt;h2&gt;Open Sourcing Earlier Benefits Others Earlier&lt;/h2&gt;
&lt;p&gt;As Eric Mill of 18F writes in &lt;a class="reference external" href="https://18f.gsa.gov/2014/07/31/working-in-public-from-day-1/"&gt;Working in public from day one&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
Even if you're working on what you think is the most niche project that no one else would ever use: leave the door open for providence.&lt;/blockquote&gt;
&lt;p&gt;You can't know all the other organizations out there and what they need. They will always know their own needs best. Give them the opportunity to benefit from your work&amp;nbsp;—&amp;nbsp;and perhaps contribute to it&amp;nbsp;—&amp;nbsp;on &lt;em&gt;their&lt;/em&gt; schedule.&lt;/p&gt;
&lt;p&gt;The benefit they get is not only technical. When you make your code open source from the start, you provide an example that internal advocates for open source at other organizations can point to. &amp;quot;Look, they're doing their project as open source, so why can't we?&amp;quot; Running your project in the open gives credibility to the notion of open source development as a normal practice, and the sooner you open source, the sooner you make that example available to others who may urgently need it.&lt;/p&gt;
&lt;p&gt;Earlier I wrote that community management is under your control: it's something you do by choice, because of the benefits it brings to your project. But community management is also &lt;em&gt;easier&lt;/em&gt; to control when scaled smoothly. It's much better for your team to start doing it early, instead of suddenly dealing with an influx of interest at the same time as version 1.0 is launched. At the beginning stages of a project, the early adopters who show up tend to bring a lot of value, and receiving that value is relatively low-effort because it's all coming form a small number of people. But the skills learned from handling those early contributors will pay off down the road. Start building the community management muscle memory early, when it's cheap, so that later when the community is larger your team already knows how to do it efficiently.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="conclusion"&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;If you want your software to be on-time, on-budget, feature-complete, and open source, then just develop it the way you normally would but with everything open source from the start. You'll still only get two of the first three, of course&amp;nbsp;—&amp;nbsp;there's no escaping the &lt;a class="reference external" href="https://en.wikipedia.org/wiki/Project_management_triangle"&gt;Project Management Triangle&lt;/a&gt;. But you'll be taking the most efficient and effective route to being open source, and the project will be better off for it.&lt;/p&gt;
&lt;/div&gt;
</content><category term="Posts"></category></entry><entry><title>Decentralization: Worth The Wait</title><link href="https://blog.opentechstrategies.com/2017/09/decentralization-worth-the-wait/" rel="alternate"></link><published>2017-09-12T00:42:00-04:00</published><updated>2017-09-12T00:42:00-04:00</updated><author><name>James Vasile</name></author><id>tag:blog.opentechstrategies.com,2017-09-12:/2017/09/decentralization-worth-the-wait/</id><summary type="html">&lt;p&gt;Ethan Zuckerman has &lt;a class="reference external" href="https://www.wired.com/story/decentralized-social-networks-sound-great-too-bad-theyll-never-work/"&gt;a piece in Wired&lt;/a&gt; that says building decentralization tools is a sucker's bet. He and his coauthors, Chelsea Barabas and Neha Narula, mention the FreedomBox, which I helped lead, as an example of how difficult this stuff is. They point to a list of things that make …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Ethan Zuckerman has &lt;a class="reference external" href="https://www.wired.com/story/decentralized-social-networks-sound-great-too-bad-theyll-never-work/"&gt;a piece in Wired&lt;/a&gt; that says building decentralization tools is a sucker's bet. He and his coauthors, Chelsea Barabas and Neha Narula, mention the FreedomBox, which I helped lead, as an example of how difficult this stuff is. They point to a list of things that make decentralized efforts prone to failure and conclude:&lt;/p&gt;
&lt;blockquote&gt;
Our research—a combination of technical and historical analysis, and dozens of interviews with open web advocates—indicates that there is no straightforward technical solution to the problem of platform monopolies. Moreover, it’s not clear we can solve the nuanced issues of centralization by pushing for &amp;quot;re-decentralization&amp;quot; of publishing online. The reality is that most people do not want to run their own web servers or social network nodes. They want to engage with the web through friendlier platforms, and these platforms will be constrained by the same forces that drive consolidation today.&lt;/blockquote&gt;
&lt;p&gt;They point to a &amp;quot;better strategy&amp;quot; of policies aimed at &amp;quot;data portability, interoperability, and alternatives to advertising-based funding models&amp;quot;.&lt;/p&gt;
&lt;p&gt;I'm no longer with FreedomBox, and none of what they write is wrong (I was one of the open web advocates they interviewed), but I wanted to chime in because there's more to decentralization than seeking a &amp;quot;straightforward technical solution&amp;quot; and building a better social networking app. It's true that we haven't realized the grand vision of Diaspora and FreedomBox. They're right that we need enlightened policy. We need the centralized platform monopolies to behave better. Those steps, though, won't ever give people control over the means of communication. Without that control, we'll always be at the mercy of Facebook or whatever comes next.&lt;/p&gt;
&lt;p&gt;Redecentralizing the web is hard. FreedomBox and other projects I've worked with found that delivering exciting, secure, privacy-respecting apps required starting from scratch. Every piece of centralized tech depends on a bunch of other pieces that also tend toward the efficiency of centralization. Most of it is invisible to end users but it's centralized pieces all the way down. We wanted to build a beautiful fountain but were missing basic plumbing. If you want to fundamentally change the relationships between the visible parts, you can't just skim the surface. You have to dive deep and you need to invent all the decentralized building blocks that make up a complete web service.&lt;/p&gt;
&lt;p&gt;It's a little like switching cars from gas to electricity. You can't just aim sunbeams at your fuel tank. You have to change every moving part in the vehicle, rethink gas stations, reinvent batteries, redesign a chunk of the electric grid, adopt new regulations, grow a new supply chain, and maybe fundamentally change the average person's relationship to their car.&lt;/p&gt;
&lt;p&gt;The internal combustion car and all the pieces of our world that relate to it benefited from billions of dollars of investment and a century of development. We're not going to shift everybody to electric cars overnight. With all the might of the car companies, it will still take decades of small changes, each one ambitious on its own. Likewise, we're not going to dislodge the Internet monopolies overnight with weekend coders and money begged on Kickstarter.&lt;/p&gt;
&lt;p&gt;What we're going to do instead is start at the bottom and build &lt;a class="reference external" href="https://ipfs.io"&gt;some&lt;/a&gt; boring &lt;a class="reference external" href="https://briarproject.org"&gt;infrastructure&lt;/a&gt; that makes other decentralized things possible. That piece will make &lt;a class="reference external" href="http://ongakuryoho.com"&gt;new decentralized work&lt;/a&gt; possible. Those efforts will also be boring to everybody except privacy geeks. But we'll keep building and refining. Eventually we'll have a towering stack of pieces, each providing some crucial bit of decentralized functionality. They'll add up to something that, finally, some end users want.&lt;/p&gt;
&lt;p&gt;And when that thing is built, nobody will notice. Unless you care what's under the hood, it will be boring, like a Prius. People who use it will like that it works well and respects their privacy, but they will understand decentralization about as well as they get battery chemistry or regenerative braking.&lt;/p&gt;
&lt;p&gt;That is what we're building towards. All of Zuckerman's points about this being a monumental task are true. We should pursue the policies he identifies. But we should firmly reject any suggestion that we stop building just because it's hard and will take a while.&lt;/p&gt;
</content><category term="Posts"></category><category term="decentralization"></category></entry><entry><title>Report on GeoNode's path to open source success</title><link href="https://blog.opentechstrategies.com/2017/06/geonode-report/" rel="alternate"></link><published>2017-06-15T19:31:00-04:00</published><updated>2017-06-15T19:31:00-04:00</updated><author><name>Karl Fogel</name></author><id>tag:blog.opentechstrategies.com,2017-06-15:/2017/06/geonode-report/</id><summary type="html">&lt;p&gt;Recently, OTS was asked to write &lt;a class="reference external" href="https://opendri.org/wp-content/uploads/2017/03/OpenDRI-and-GeoNode-a-Case-Study-on-Institutional-Investments-in-Open-Source.pdf"&gt;a report&lt;/a&gt; about the GeoNode project by one of its primary sponsors, the &lt;a class="reference external" href="https://www.gfdrr.org/"&gt;Global Facility for Disaster Reduction and Recovery&lt;/a&gt; (GFDRR) a global partnership that is managed by the World Bank.&amp;nbsp; &lt;a class="reference external" href="http://geonode.org/"&gt;GeoNode&lt;/a&gt; is a facility for sharing and displaying geographical information.&amp;nbsp; It is &amp;quot;web-based …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Recently, OTS was asked to write &lt;a class="reference external" href="https://opendri.org/wp-content/uploads/2017/03/OpenDRI-and-GeoNode-a-Case-Study-on-Institutional-Investments-in-Open-Source.pdf"&gt;a report&lt;/a&gt; about the GeoNode project by one of its primary sponsors, the &lt;a class="reference external" href="https://www.gfdrr.org/"&gt;Global Facility for Disaster Reduction and Recovery&lt;/a&gt; (GFDRR) a global partnership that is managed by the World Bank.&amp;nbsp; &lt;a class="reference external" href="http://geonode.org/"&gt;GeoNode&lt;/a&gt; is a facility for sharing and displaying geographical information.&amp;nbsp; It is &amp;quot;web-based, open source software that enables organizations to easily create catalogs of geospatial data, and that allows users to access, share, and visualize that data,&amp;quot; as we put it in our report.&lt;/p&gt;
&lt;p&gt;GFDRR and its &lt;a class="reference external" href="https://opendri.org/"&gt;Open Data for Resilience Initiative (OpenDRI)&lt;/a&gt; work to increase community resilience to natural disasters, in particular by sharing data.&amp;nbsp; GeoNode helps them do this by providing a way to easily share geographical data - what parts of a city are the lowest and most prone to flooding?&amp;nbsp; Where exactly has an earthquake hit, and where is assistance needed most quickly?&lt;/p&gt;
&lt;div class="section" id="why-write-a-report"&gt;
&lt;h2&gt;Why write a report?&lt;/h2&gt;
&lt;p&gt;OpenDRI began the GeoNode project in 2009, and has been a major contributor to the code and community since then.&amp;nbsp; In 2016, they decided that they'd like to contribute in another way: GeoNode as a project has been tremendously successful, and they wanted to share lessons about how to incubate an open source project.&amp;nbsp; Large institutions sometimes sponsor open source projects, and do not always have success involving partners to the extent they would like.&amp;nbsp; OpenDRI brought in major partners and is now no longer the primary contributor to GeoNode's development.&amp;nbsp; They would like to be able to replicate this success in future projects, and wanted to offer an example to the open source community about releasing and cultivating a project like this.&amp;nbsp; To clarify the example, OpenDRI asked OTS to write a report about the GeoNode project.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="our-process"&gt;
&lt;h2&gt;Our process&lt;/h2&gt;
&lt;div class="line-block"&gt;
&lt;div class="line"&gt;To complete the report, we interviewed participants in the project, from&lt;/div&gt;
&lt;div class="line"&gt;people who had been involved from the very beginning to more recent&lt;/div&gt;
&lt;div class="line"&gt;additions.&amp;nbsp; In general, we strove to get perspectives from people from&lt;/div&gt;
&lt;div class="line"&gt;different levels of the contributing organizations -- not just&lt;/div&gt;
&lt;div class="line"&gt;developers, but decision-makers and funders.&amp;nbsp; We also looked back at&lt;/div&gt;
&lt;div class="line"&gt;tangible evidence from the earlier days of the project: commits, mailing&lt;/div&gt;
&lt;div class="line"&gt;list archives, blog posts, and documents generated from early in-person&lt;/div&gt;
&lt;div class="line"&gt;meetings.&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="results"&gt;
&lt;h2&gt;Results&lt;/h2&gt;
&lt;p&gt;These interviews and research resulted in 9 major lessons for organizations starting future open source projects:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Run as an open source project from the very beginning&lt;/li&gt;
&lt;li&gt;Engage other organizations commercially&lt;/li&gt;
&lt;li&gt;Focus on communications and evangelism early&lt;/li&gt;
&lt;li&gt;Find and encourage the right partners&lt;/li&gt;
&lt;li&gt;Invest in collaboration infrastructure&lt;/li&gt;
&lt;li&gt;Hold events and sponsor attendance&lt;/li&gt;
&lt;li&gt;Use funding choices as a signal to peer institutions&lt;/li&gt;
&lt;li&gt;Improve user experience to attract new users&lt;/li&gt;
&lt;li&gt;Change the nature of your investment as needed&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Flexibility and openness were both key for OpenDRI's success.&amp;nbsp; While GeoNode benefited from having been built on existing open source libraries and platforms, its widespread use and adoption were due just as much if not more to the openness of its community.&amp;nbsp; Its early supporters at OpenDRI shared it widely with similar organizations and worked hard to invite in new contributors.&lt;/p&gt;
&lt;p&gt;The full report is available from OpenDRI - see their summary and a download link &lt;a class="reference external" href="https://opendri.org/resource/opendri-geonode-a-case-study-for-institutional-investments-in-open-source/"&gt;here&lt;/a&gt;, and &lt;a class="reference external" href="http://blogs.worldbank.org/opendata/leveraging-open-source-public-institution-new-analysis-reveals-significant-returns-investment-open"&gt;their announcement blog post&lt;/a&gt; for more.&lt;/p&gt;
&lt;/div&gt;
</content><category term="Posts"></category><category term="publications"></category></entry><entry><title>"Open source mistakes for enterprise newcomers" on O'Reilly Radar</title><link href="https://blog.opentechstrategies.com/2017/05/mistakes-for-enterprise-newcomers/" rel="alternate"></link><published>2017-05-10T20:40:00-04:00</published><updated>2017-05-10T20:40:00-04:00</updated><author><name>James Vasile</name></author><id>tag:blog.opentechstrategies.com,2017-05-10:/2017/05/mistakes-for-enterprise-newcomers/</id><summary type="html">&lt;p&gt;OTS partners James Vasile and Karl Fogel recently wrote &lt;a class="reference external" href="https://www.oreilly.com/ideas/open-source-mistakes-for-enterprise-newcomers"&gt;a post for O'Reilly Radar&lt;/a&gt; about common mistakes that companies make when they start to get involved in open source.&amp;nbsp; They write:&lt;/p&gt;
&lt;blockquote&gt;
Open source reinvents relationships and business dynamics, turning customers and even competitors into collaborators. Firms embrace it to encourage …&lt;/blockquote&gt;</summary><content type="html">&lt;p&gt;OTS partners James Vasile and Karl Fogel recently wrote &lt;a class="reference external" href="https://www.oreilly.com/ideas/open-source-mistakes-for-enterprise-newcomers"&gt;a post for O'Reilly Radar&lt;/a&gt; about common mistakes that companies make when they start to get involved in open source.&amp;nbsp; They write:&lt;/p&gt;
&lt;blockquote&gt;
Open source reinvents relationships and business dynamics, turning customers and even competitors into collaborators. Firms embrace it to encourage those dynamics, when the benefits of participating outweigh the gains from going it alone with proprietary code. But open source isn't an outcome in itself. It is an approach for finding where different firms’ interests intersect and helping them cooperate there — but it is the path, not the place. To enjoy its full benefits, one must visibly walk that path.&lt;/blockquote&gt;
&lt;p&gt;Thanks to Andy Oram and Adam Flaherty for their expert editing and advice.&amp;nbsp; You can &lt;a class="reference external" href="https://www.oreilly.com/ideas/open-source-mistakes-for-enterprise-newcomers"&gt;read the full article on O'Reilly&lt;/a&gt;.&lt;/p&gt;
</content><category term="Posts"></category><category term="publications"></category></entry><entry><title>Attending the Wontfix Cabal</title><link href="https://blog.opentechstrategies.com/2017/02/attending-the-wontfix-cabal/" rel="alternate"></link><published>2017-02-24T15:21:00-05:00</published><updated>2017-02-24T15:21:00-05:00</updated><author><name>Karl Fogel</name></author><id>tag:blog.opentechstrategies.com,2017-02-24:/2017/02/attending-the-wontfix-cabal/</id><summary type="html">&lt;p&gt;GitHub hosted the &amp;quot;&lt;a class="reference external" href="https://maintainerati.org/"&gt;Wontfix&lt;/a&gt; &lt;a class="reference external" href="https://github.com/maintainerati/events/tree/master/wontfix_cabal"&gt;Cabal&lt;/a&gt;&amp;quot; last week in San Francisco, and I was lucky enough to attend, thanks to a pointer from &lt;a class="reference external" href="https://changeset.nyc/index.html"&gt;a friend&lt;/a&gt;.&amp;nbsp; The organizers, led by &lt;a class="reference external" href="https://twitter.com/jessfraz"&gt;Jess Frazelle,&lt;/a&gt; conceived the gathering as a chance for people maintaining open source projects to discuss their particular difficulties and some strategies …&lt;/p&gt;</summary><content type="html">&lt;p&gt;GitHub hosted the &amp;quot;&lt;a class="reference external" href="https://maintainerati.org/"&gt;Wontfix&lt;/a&gt; &lt;a class="reference external" href="https://github.com/maintainerati/events/tree/master/wontfix_cabal"&gt;Cabal&lt;/a&gt;&amp;quot; last week in San Francisco, and I was lucky enough to attend, thanks to a pointer from &lt;a class="reference external" href="https://changeset.nyc/index.html"&gt;a friend&lt;/a&gt;.&amp;nbsp; The organizers, led by &lt;a class="reference external" href="https://twitter.com/jessfraz"&gt;Jess Frazelle,&lt;/a&gt; conceived the gathering as a chance for people maintaining open source projects to discuss their particular difficulties and some strategies for addressing them.&amp;nbsp; About 100 maintainers took them up on it and convened in San Francisco.&amp;nbsp; At the beginning of the day, we compiled dozens of sticky notes worth of problems that come up in our various projects.&amp;nbsp; These ranged from tips for maintainers who had received the classic question &amp;quot;Is this project still maintained?&amp;quot; to &amp;quot;Ethics and Exploitation in Open Source.&amp;quot;&amp;nbsp; In a common unconference pattern, attendees voted on those topics.&amp;nbsp; The most popular topics were chosen to become discussion groups, and we split up for a morning session and an afternoon session.&lt;/p&gt;
&lt;p&gt;In the morning, I joined the &amp;quot;Code Review&amp;quot; discussion group.&amp;nbsp; At OTS, we frequently advise clients who aren't familiar with the ins and outs of accepting and reviewing contributions from outside parties.&amp;nbsp; This group confirmed our best practices around code review, and reaffirmed its importance.&amp;nbsp; Much of this particular discussion was about projects with an overabundance of pull requests (PRs), which is of course a good problem to have.&lt;/p&gt;
&lt;p&gt;A few themes emerged:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;strong&gt;Encourage contributors to start a conversation before putting in too much time and effort.&lt;/strong&gt; &amp;nbsp; The discussion phrased this as &amp;quot;open an issue before submitting a PR,&amp;quot; but really the goal is to avoid a situation where a contributor puts a lot of work and time into a pull request that the maintainers don't want to accept.&amp;nbsp; If the person opens an issue for their proposed change, that gives project maintainers an opportunity to respond with reasons why they wouldn't accept a PR with that change.&amp;nbsp; For small changes, opening a PR might be enough to start the conversation, and making a separate issue could be too much overhead.&amp;nbsp; The important thing to communicate to contributors is that they should be checking in with the project's maintainers on the direction of their work when they begin.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Use GitHub's templates for PRs and issues&lt;/strong&gt;.&amp;nbsp; These save time by giving contributors a clear idea of what kind of information the project expects, like a DCO (Developer Certificate of Origin), tests for any new functionality, and updates to the documentation.&amp;nbsp; Templates also allow projects to use bots for initial review and response to new contributions.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Automate initial responses.&lt;/strong&gt;&amp;nbsp; Responding to PRs and issues with bots saves time for the maintainers while still ensuring that contributors get a response (to retain contributors, it's crucial to engage with them -- that attention is their reward for contributing).&amp;nbsp; Another discussion group pointed out that contributors might take more kindly to being corrected by a bot than by a person.&amp;nbsp; Robots aren't judging, so the embarrassment of getting something wrong is much reduced when it's a bot pointing out the mistake.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In the afternoon, I joined a group on &amp;quot;internal versus external contributions.&amp;quot;&amp;nbsp; That is, what happens if an open source project is primarily sponsored by just one company?&amp;nbsp; For one thing, sometimes that company's priorities will not line up with those of the community.&amp;nbsp; See the full notes &lt;a class="reference external" href="https://github.com/maintainerati/events/blob/master/wontfix_cabal/notes-2/internal-vs-external.md"&gt;here&lt;/a&gt;.&amp;nbsp; Some of the main points were relatively straightforward: make clear to contributors what kind of governance your project has, or if it has none.&amp;nbsp; Determine early whether this is primarily a community-driven or a company-driven project, and indicate that to everyone involved.&amp;nbsp; Overall, make sure that the decision-making process is clear.&lt;/p&gt;
&lt;p&gt;One part of this discussion that surprised me was how few of the long-lived, well-known projects represented in the group had any kind of formal governance procedure.&amp;nbsp; &lt;a class="reference external" href="https://kubernetes.io/"&gt;Kubernetes&lt;/a&gt; was mentioned as an example of a project that does have &lt;a class="reference external" href="https://github.com/kubernetes/community/blob/master/governance.md"&gt;explicit governance&lt;/a&gt;.&amp;nbsp; Many others, though, do not.&amp;nbsp; One recommendation that came out of this session was to research and adopt governance practices in more of these single-company-led projects.&amp;nbsp; This calls back to the determination to &amp;quot;be clear about the decision-making process.&amp;quot;&amp;nbsp; It's fine if internal contributors have outsize influence on project direction, so long as that is communicated at the outset.&lt;/p&gt;
&lt;p&gt;I was glad to see that this is consistent with the advice OTS typically gives our clients: don't worry about governance too soon!&amp;nbsp; Our clients are frequently concerned about how to set up their governance structures before they have a single outside contributor.&amp;nbsp; The fact that many successful and widely used projects don't have formal governance until their lack of it becomes a problem is just more evidence in favor of deferring these structures, which can quash early project momentum.&amp;nbsp; There is little need to worry about governance until conflicting priorities between contributor groups become apparent.&amp;nbsp; Later in a project's life, however, more explicit governance is crucial in order to avoid &lt;a class="reference external" href="http://producingoss.com/en/forks.html"&gt;forks&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Most of the conference went on outside these specific sessions.&amp;nbsp; We spent twelve hours together, talking about current projects, aspirations for our communities, opportunities for mentoring, and more.&amp;nbsp; I'm thrilled that I was able to attend -- meeting &lt;a class="reference external" href="https://github.com/maintainerati/events/blob/master/wontfix_cabal/participants.md"&gt;the other attendees&lt;/a&gt; was fascinating, as was hearing about different approaches to maintainership.&amp;nbsp; Many thanks to the organizers and sponsors for making this possible.&amp;nbsp; I don't yet know if there'll be a follow-up next year, but if so, count me in.&lt;/p&gt;
</content><category term="Posts"></category></entry><entry><title>Sharing data across Red Cross projects: the Smoke Alarm Portal and allReady</title><link href="https://blog.opentechstrategies.com/2016/11/smoke_alarm_and_allready/" rel="alternate"></link><published>2016-11-29T21:15:00-05:00</published><updated>2016-11-29T21:15:00-05:00</updated><author><name>Karl Fogel</name></author><id>tag:blog.opentechstrategies.com,2016-11-29:/2016/11/smoke_alarm_and_allready/</id><summary type="html">&lt;p&gt;OTS has been lucky enough to work with the &lt;a class="reference external" href="http://www.redcross.org/local/illinois/chicago-northern-illinois"&gt;Red Cross of Chicago and Northern Illinois (CNI)&lt;/a&gt; for the past year and a half, thanks in large part to the civic data community at &lt;a class="reference external" href="https://chihacknight.org/"&gt;Chi Hack Night&lt;/a&gt;.&amp;nbsp; With Jim McGowan, CNI's Director of Planning and Situational Awareness, we developed the …&lt;/p&gt;</summary><content type="html">&lt;p&gt;OTS has been lucky enough to work with the &lt;a class="reference external" href="http://www.redcross.org/local/illinois/chicago-northern-illinois"&gt;Red Cross of Chicago and Northern Illinois (CNI)&lt;/a&gt; for the past year and a half, thanks in large part to the civic data community at &lt;a class="reference external" href="https://chihacknight.org/"&gt;Chi Hack Night&lt;/a&gt;.&amp;nbsp; With Jim McGowan, CNI's Director of Planning and Situational Awareness, we developed the open source &lt;a class="reference external" href="https://getasmokealarm.org/"&gt;Smoke Alarm Request Portal&lt;/a&gt;, where you can request to have a volunteer come install a smoke alarm in your home for free.&lt;/p&gt;
&lt;p&gt;Now we're connecting the Smoke Alarm Request Portal to &lt;a class="reference external" href="http://www.htbox.org/projects/allready"&gt;allReady&lt;/a&gt;, an open source platform for volunteer preparedness and coordination (part of the Humanitarian Toolbox suite of disaster preparedness and prevention tools).&amp;nbsp; With help from both open source communities, the two applications will share data to simplify the process of scheduling smoke alarm installations.&lt;/p&gt;
&lt;hr class="docutils" /&gt;
&lt;p&gt;&lt;strong&gt;The Red Cross and open source&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The &lt;a class="reference external" href="http://www.redcross.org/"&gt;American Red Cross&lt;/a&gt; is a volunteer-driven organization: their disaster relief and prevention campaigns depend on the work of many people who are not on staff.&amp;nbsp; CNI in particular believes that this focus on recruiting, training, and involving volunteers across their organization means that they should run their software initiatives as collaborative open source projects.&amp;nbsp; Open source offers their volunteers another way to be involved in their work, and allows people who may not be able to offer time on the ground a way to contribute to the Red Cross' mission.&lt;/p&gt;
&lt;hr class="docutils" /&gt;
&lt;p&gt;&lt;strong&gt;Smoke Alarm Portal&lt;/strong&gt;&lt;/p&gt;
&lt;img alt="getasmokealarm-screenshot" class="alignnone size-medium wp-image-84" src="http://blog.opentechstrategies.com/wp-content/uploads/2016/11/getasmokealarm-screenshot-300x164.png" style="width: 300px; height: 164px;" /&gt;
&lt;p&gt;The Red Cross currently has a goal to reduce home fire deaths and injuries in the United States by 25% by 2020 (see &lt;a class="reference external" href="http://www.redcross.org/get-help/prepare-for-emergencies/types-of-emergencies/fire/prevent-home-fire#Resources"&gt;their resources page on home fires&lt;/a&gt;).&amp;nbsp; One piece of their campaign to prevent fires is free smoke alarm installation.&amp;nbsp; Anyone can sign up to receive a free smoke alarm for their home, and Red Cross staff and volunteers will bring and install one or more as needed.&lt;/p&gt;
&lt;p&gt;CNI was already accepting smoke alarm installation requests by phone, but they (and the rest of the Northern Division) realized they could manage requests much more efficiently via the web.&amp;nbsp; They just needed a simple application where users could request a free smoke alarm.&amp;nbsp; OTS built an open source application and deployed it at &lt;a class="reference external" href="https://getasmokealarm.org/"&gt;getasmokealarm.org&lt;/a&gt;.&amp;nbsp; See &lt;a class="reference external" href="https://github.com/redcross/smoke-alarm-portal"&gt;the project on GitHub&lt;/a&gt; to see the code, or to get involved (as &lt;a class="reference external" href="https://github.com/redcross/smoke-alarm-portal/pulls?utf8=%E2%9C%93&amp;amp;q=is%3Apr"&gt;many people have&lt;/a&gt;).&lt;/p&gt;
&lt;hr class="docutils" /&gt;
&lt;p&gt;&lt;strong&gt;Humanitarian Toolbox and allReady&lt;/strong&gt;&lt;/p&gt;
&lt;img alt="allreadybiglogo" class="alignnone size-medium wp-image-86" src="http://blog.opentechstrategies.com/wp-content/uploads/2016/11/allreadybiglogo-300x103.png" style="width: 300px; height: 103px;" /&gt;
&lt;p&gt;While the Smoke Alarm Portal was being developed, Jim McGowan began working with the &lt;a class="reference external" href="http://www.htbox.org/"&gt;Humanitarian Toolbox&lt;/a&gt; (HTBox) project on an ambitious open source solution to increase community resilience and disaster prevention efficiency.&amp;nbsp; The allReady project, as described in their &lt;a class="reference external" href="http://www.htbox.org/blog/allready-project-launched-at-visual-studio-2015-release-event"&gt;announcement blog post&lt;/a&gt; and &lt;a class="reference external" href="http://www.htbox.org/projects/allready"&gt;project page&lt;/a&gt;, aspires to &amp;quot;put disaster out of business&amp;quot; by increasing the resiliency of communities across America.&amp;nbsp; Its goal is to be a central application for coordinating volunteers across disaster prevention and relief campaigns for the use of non-profit groups like the Red Cross as well as town and city governments. (See the &lt;a class="reference external" href="https://github.com/HTBox/allReady"&gt;allReady GitHub page here&lt;/a&gt;.)&lt;/p&gt;
&lt;hr class="docutils" /&gt;
&lt;p&gt;&lt;strong&gt;Bringing them together&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Since allReady aims to be the central warehouse of all disaster prevention data for its users, it's only natural that it should be used as an interface into the Smoke Alarm Portal.&amp;nbsp; Even before allReady is in production, OTS is working with the HTBox team to &lt;a class="reference external" href="https://github.com/redcross/smoke-alarm-portal/issues/196"&gt;add API endpoints&lt;/a&gt; to &lt;a class="reference external" href="https://github.com/HTBox/allReady/issues/1055"&gt;both&lt;/a&gt; projects that will allow Red Cross volunteers to update the status of smoke alarm requests from within allReady, without affecting the workflow for people requesting smoke alarm installation.&lt;/p&gt;
&lt;p&gt;Once this work is complete, end users will only need to interact with &lt;a class="reference external" href="http://getasmokealarm.org"&gt;getasmokealarm.org&lt;/a&gt;, while administrative users (Red Cross volunteers and staff, in this case) can sign in to manage smoke alarm requests &lt;em&gt;and&lt;/em&gt; other kinds of prevention work from within allReady.&amp;nbsp; If a Red Cross staffer knows that a volunteer team is going to a neighborhood to install smoke alarms, they might also be able to stop and drop off supplies for a family in the same area that recently suffered a different kind of emergency.&amp;nbsp; Once the volunteers update the smoke alarm installation status in allReady, that application will also update the status in the Smoke Alarm Portal.&lt;/p&gt;
&lt;hr class="docutils" /&gt;
&lt;p&gt;&lt;strong&gt;Next steps&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Linking allReady with the Smoke Alarm Portal is still in progress.&amp;nbsp; We're happy to work with anyone who wants to to improve and test the endpoints on both projects, to review documentation, and to give feedback on design.&amp;nbsp; Most importantly, though, let your local disaster prevention groups know about allReady and the Smoke Alarm Portal, and check the batteries in your smoke alarms!&lt;/p&gt;
</content><category term="Posts"></category></entry><entry><title>Open Source Code of Conduct for Commercial Entities (DRAFT)</title><link href="https://blog.opentechstrategies.com/2016/06/oss_commercial_coc_draft/" rel="alternate"></link><published>2016-06-03T10:05:00-04:00</published><updated>2016-06-03T10:05:00-04:00</updated><author><name>Karl Fogel</name></author><id>tag:blog.opentechstrategies.com,2016-06-03:/2016/06/oss_commercial_coc_draft/</id><summary type="html">&lt;div class="docutils container" id="preface"&gt;
&lt;p&gt;Note: This is a draft of a Code of Conduct meant to help a specific open source project give guidance to its commercial participants. The project is already in production use, and is successful enough that some commercial entities have become involved, offering support, hosting services, customization, etc. However, those …&lt;/p&gt;&lt;/div&gt;</summary><content type="html">&lt;div class="docutils container" id="preface"&gt;
&lt;p&gt;Note: This is a draft of a Code of Conduct meant to help a specific open source project give guidance to its commercial participants. The project is already in production use, and is successful enough that some commercial entities have become involved, offering support, hosting services, customization, etc. However, those companies need some guidelines about how to conduct themselves, in relation to the project as a whole and in relation to each other.&lt;/p&gt;
&lt;p&gt;The first half of the draft is aimed at commercial entities. The second half of the draft contains guidelines for the open source project itself&amp;nbsp;—&amp;nbsp;healthy commercial participation being a two-way street.&lt;/p&gt;
&lt;p&gt;Once the text is finalized, we plan is to post this in generic form, as a template that other projects can use, while delivering a customized version to that project.&lt;/p&gt;
&lt;p&gt;In the meantime, comments welcome! You can simply leave regular blog comments, but we've also enabled the open source &lt;a class="reference external" href="https://wordpress.org/plugins/hypothesis/"&gt;Hypothes.is WordPress annotation plugin&lt;/a&gt; to allow sidebar annotations of selected text. To use it, just mouse-select any passage of text, as though you were going to copy it to the clipboard, and then wait for the Hypothes.is annotation action buttons to pop up right under your selected text. There should be two of them: &amp;quot;Annotate&amp;quot; and &amp;quot;Highlight&amp;quot;. Choose &amp;quot;Annotate&amp;quot;, and then, at the top of the right-hand sidebar that should now open up, create a free account at Hypothes.is, or sign in if you already have an account. (We need the authentication step to help prevent spam annotations.) Once you are signed in, you can leave a sidebar comment associated with a specific passage of text&amp;nbsp;—&amp;nbsp;the user interface should be pretty clear from this point on. Please note that your comments will be publicly visible by default; you can also make an annnotation that's private to yourself, but then we wouldn't be able to see it either of course.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="open-source-code-of-conduct-for-commercial-entities-draft-1"&gt;
&lt;h2&gt;Open Source Code of Conduct for Commercial Entities (DRAFT)&lt;/h2&gt;
&lt;div class="docutils container" id="introduction"&gt;
&lt;p&gt;The [Your Project Here] Project welcomes involvement from commercial entities. The availability of multiple sources of commercial support is important to the project's long-term health, and to making [Your Project Here] a persuasive choice for organizations around the world. Commercial support can include but is not limited to hosting, on-site deployment and installation,&amp;nbsp;advocacy, PR and event funding, administrative services, customization, and even implementation of new features.&lt;/p&gt;
&lt;p&gt;This code of conduct provides guidance for commercial entities wishing to participate in the [Your Project Here] ecosystem. While the specific items in the code may be revised from time to time, overall the code is based on a simple principle:&lt;/p&gt;
&lt;p&gt;Commercial entities should observe the distinction between public community functions and private commercial functions, and ensure that their activities support (or at least do not harm) the public community.&lt;/p&gt;
&lt;p&gt;The first half of these guidelines is meant for commercial entities, but the second half is meant for the open source project as a whole, since a commercially healthy open source environment depends on everyone doing their part. Some of the guidelines are proscriptive, being based on situations that have arisen in the real world&amp;nbsp;—&amp;nbsp;in [Your Project Here] and elsewhere&amp;nbsp;—&amp;nbsp;but we also include some positive recommendations that can help commercial entities participate successfully.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="docutils container" id="for-commercial-entities"&gt;
&lt;p class="rubric" id="guidelines-for-commercial-entities"&gt;Guidelines for Commercial Entities&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;ul class="first"&gt;
&lt;li&gt;&lt;div class="first docutils container" id="branding"&gt;
&lt;p&gt;Treat the project's name with respect, and follow the project's trademark and branding policy.&lt;/p&gt;
&lt;p&gt;Don't use the project's name for things which are not related to nor supported by the project.&amp;nbsp; In general, don't introduce confusion about what the project's name means and refers to. Also, don't seize the project's name in other public namespaces, e.g., in domain names, Twitter, GitHub, Slack, etc. (It is fine, however, to register the project's name in a new namespace and then immediately donate control of that account to the project&amp;nbsp;—&amp;nbsp;that's simply helping the project maintain its identity.)&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;ul class="first simple"&gt;
&lt;li&gt;TBD: [Your Project Here] needs a trademark policy, for this item to be effective. See the item &lt;a class="reference external" href="#have-trademark-policy"&gt;Have and enforce a formal trademark and branding policy&lt;/a&gt; in the section &lt;a class="reference external" href="#for-project"&gt;Guidelines for the Open Source Project&lt;/a&gt; for more about this.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;ul class="first"&gt;
&lt;li&gt;&lt;div class="first docutils container" id="infra"&gt;
&lt;p&gt;Don't replace community infrastructure; instead, improve it.&lt;/p&gt;
&lt;p&gt;For example, use the project's discussion forums as specified in their charters, instead of setting up duplicate forums in a privately-controlled space that could potentially siphon off people from the project's existing forums. I.e., don't set up &amp;quot;walled gardens&amp;quot; that detract from public spaces. The same principle applies to other kinds of community infrastructure too, e.g. wikis, but we'll use discussion forums as an example here.&lt;/p&gt;
&lt;p&gt;It is fine to set up private forums that are specific to commercial offerings, especially where those offerings differ from what is available in the open source project (though see below about &lt;a class="reference external" href="#distinguish"&gt;avoiding the &amp;quot;enterprise edition&amp;quot; trap&lt;/a&gt;). Discussion that is specific to a company's commercial offering is only useful to that company's customers. But do not try to discourage customers from making use of the project's public forums when doing so would serve their needs.&lt;/p&gt;
&lt;p&gt;A good way for a company to ensure compliance with this guideline is to link to the relevant project forums from the same places&amp;nbsp;—&amp;nbsp;and in comparable ways&amp;nbsp;—&amp;nbsp;that the company links to its product-specific forums. That way customers will be aware of all the options available to them and can choose the appropriate forum for their needs. It also means that customers' questions, and the company's or others' responses to them, can contribute to the public store of knowledge about the project, which is an important way that commercial activity can support the long-term health of the project. Company representatives should include their affiliation in the support responses they make to customers or to anyone else; work the company performs publicly is still work that it did, and the company should get credit for its contributions.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;ul class="first"&gt;
&lt;li&gt;&lt;div class="first docutils container" id="distinguish"&gt;
&lt;p&gt;Label the company's offerings in a way that makes their provenance clear, and that does not denigrate or diminish the open source project.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Specifically, do not label a proprietary offering as the &amp;quot;Commercial Edition&amp;quot; or &amp;quot;Enterprise Edition&amp;quot; of the project&lt;/em&gt;, especially not in contrast to a so-called &amp;quot;Community Edition&amp;quot; as a euphemism for the project's open source code. That kind of marketing implies that the open source edition is somehow not commercial (which would be untrue, as the open source license explicitly allows commercial activity by anyone) or not enterprise-ready (unlikely to be true, but in any case ill-defined).&lt;/p&gt;
&lt;p&gt;Instead, give the company's offerings their own distinctive names. If those names incorporate the name of the project in some way, that may be fine so long as it complies with the project's trademark guidelines. It is also fine to offer fact-based comparisons between the company's proprietary offering and the stock open source version, or between this company's offering and others' proprietary offerings. Or if the offering is also open source software, but differs from the project's offering in some significant way, explain that, and again make sure the company's offering has a name that clearly distinguishes it from the code released by the project.&lt;/p&gt;
&lt;p&gt;The purpose of this guideline is to help the company communicate clearly about what it offers, and to help potential customers understand what differentiates this company's offerings from what is available elsewhere. There is nothing wrong with offering features not present in the project's open source releases, or with making different configuration choices from the project's defaults. Just describe the differences accurately and objectively. Mislabeling, whether accidental or deliberate, causes confusion and is bad for the project's health.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;ul class="first"&gt;
&lt;li&gt;&lt;div class="first docutils container" id="governance"&gt;
&lt;p&gt;Do not attempt to convert unofficial influence into claims of official control.&lt;/p&gt;
&lt;p&gt;Even if the company is a major contributor to the open source project, do not conflate the project's identity with the company's. If a company with a well-established position in the project casts too large a shadow, that may discourage involvement from others.&lt;/p&gt;
&lt;p&gt;For example, the company might have a number of employees as core committers in the project, and thus exercise a significant de facto influence over the project roadmap, simply by doing a lot of the work and participating actively in project development discussions. This is generally not a problem, as long as the company does not claim some official preferential position in project governance that it does not in fact hold.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;ul class="first"&gt;
&lt;li&gt;&lt;div class="first docutils container" id="participation"&gt;
&lt;p&gt;In public forums, the company's employees should behave like any other project participants.&lt;/p&gt;
&lt;p&gt;While management hierarchy may be important internally to the company, it is irrelevant to the public open source project. For example, if the company assigns an employee specifically to work on the project, expect that employee's contributions to still go through the usual review procedures, and expect that employee to gain commit access by the same route as anyone else would. Similarly, it is good practice for the company's employees to hold design discussions or other technical discussions in the project's public development forums, even if the employees normally sit in the same room and could discuss those things in person. The more they participate visibly in the project, the stronger the ties between the company and the project will be.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;ul class="first"&gt;
&lt;li&gt;&lt;div class="first docutils container" id="staying-public"&gt;
&lt;p&gt;Contribute to public activity, and avoid converting public conversations to private ones.&lt;/p&gt;
&lt;p&gt;When commercial representatives are active in an open source project's public forums, there will be many opportunities to turn public conversations into sales opportunities. This can be a good thing&amp;nbsp;—&amp;nbsp;often a potential customer will benefit from being contacted about a commercial offering, and commercial entities should feel free to establish such contact so long as they avoid harassing or spamming people. In general, if some user indicates needs that would be met by the company's product, it is reasonable to contact them about that directly, as long as the company is respectful of the charter of the forum in which it encountered the user and of any preferences they give about unsolicited commercial communications.&lt;/p&gt;
&lt;p&gt;However, it is important to avoid shunting conversations out of public forums, where inquiries and responses will remain visible to others, and into private forums, where the initiator would be isolated from other sources of information. The best way to avoid this anti-pattern is to distinguish carefully between answering questions and offering commercial services. The former should always be done via a public followup in the original forum where the question was asked, while the latter should happen via a separate private communication. A topic that started in public should remain public, and should not be interfered with or subsumed by private conversations.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;ul class="first"&gt;
&lt;li&gt;&lt;div class="first docutils container" id="documentation"&gt;
&lt;p&gt;Improve project documentation, don't fork it.&lt;/p&gt;
&lt;p&gt;Help make the project's public documentation better, rather than duplicating and extending that documentation elsewhere. Even if the duplicate documentation is publicly accessible even to non-customers, it will still detract by its mere existence from the project's own documentation, among other things by causing confusion in Internet search engine results.&lt;/p&gt;
&lt;p&gt;It is fine for the company to maintain separate documentation for functionality that is specific to its product or service. But as much as possible, avoid duplicating material already present in the project's documentation. Instead, refer to the project's documentation, and, as much as necessary, participate in improving it and making it easier to refer to, so that the maintenance burden is reduced for the company and everyone else.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;ul class="first"&gt;
&lt;li&gt;&lt;div class="first docutils container" id="non-competes"&gt;
&lt;p&gt;Any restrictions in non-compete agreements should only affect business activity, not project activity.&lt;/p&gt;
&lt;p&gt;If the company requires employees or contractors to sign non-compete agreements, those agreements must not prevent the individual in question from participating in the open source project in any way, whether during or after the term of their employment.&lt;/p&gt;
&lt;p&gt;This does not mean that all non-compete agreements are incompatible with this code of conduct. A company may restrict an employee's ability to solicit the company's customers, for example. The key is that any restrictions should be about things other than project participation itself. An individual should not be blocked from any form of technical or social participation in the project, including the implementation of particular features.&lt;/p&gt;
&lt;p&gt;The accumulation of experience and expertise in individual persons, who are ultimately free to direct their energy and attention as they decide, is one of the most important drivers of progress in open source projects. A company that limits this freedom can damage the open source project very seriously.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;ul class="first"&gt;
&lt;li&gt;&lt;div class="first docutils container" id="security"&gt;
&lt;p&gt;Security vulnerability information should always be promptly disclosed to the project.&lt;/p&gt;
&lt;p&gt;If a commercial entity learns about a security vulnerability in the open source code, it should always promptly disclose that information to the project using the project's designated channel for reporting such vulnerabilities. (Of course it is acceptable to pre-patch the company's own offerings, as long as that patching does not significantly delay the reporting of the vulnerability.)&lt;/p&gt;
&lt;p&gt;Vulnerability information should never be used for unilateral commercial advantage. Vendors may legitimately compete on the speed and reliability with which they deploy security fixes, but withholding vulnerability information damages everyone in the long run by risking harm to the project's reputation and the security of all users.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;ul class="first"&gt;
&lt;li&gt;&lt;div class="first docutils container" id="priorities"&gt;
&lt;p&gt;Company staff should be forthright about the company's commercial interests.&lt;/p&gt;
&lt;p&gt;There is no need to hide motivations in an open source project. It is very normal for developers to propose that a certain capability be added to the code and justify the proposal on the grounds that it would help their employer's commercial interests. The best situation for the project is one in which developers communicate their priorities clearly and straightforwardly. As long as the proposed change goes through the project's usual decision-making procedures, the fact that it would serve specific commercial interests is not only not bad for the project, it may often be good: after all, continued commercial interest in the code is usually a good thing.&lt;/p&gt;
&lt;p&gt;Of course, it would be odd to make a technical proposal that is wildly divergent from the project's current roadmap and from the interests of all other parties participating in the project, but in that case the proposal is likely to be rejected anyway. In general, there is no need to pretend to purity of motivations. Finding sustainable resolutions to the tensions between various parties' needs is a long and well-established tradition in open source projects; as long as the company participates in those discussions in good faith, and compromises where appropriate, the influence of the company's commercial motivations is likely to be an overall benefit to the project.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;div class="first docutils container" id="ombud"&gt;
&lt;p&gt;Consider having a designated contact person or ombud, to represent community concerns internally.&lt;/p&gt;
&lt;p&gt;Depending on the size of the company and the degree of its involvement in the open source project, it may wish to officialize a role for representing community concerns internally. In practice, this role is often assumed informally anyway, usually by an engineer or community manager who works for the company but who is active in and invested in the project. What the company can do is make sure this person feels comfortable raising project concerns internally.&lt;/p&gt;
&lt;p&gt;Establishing that level of comfort is a matter of company culture, and obviously these guidelines cannot require nor enforce a particular corporate culture. All they can do is point out that the best way for executives to make informed decisions is by giving those closest to the project a chance to represent the project's interests honestly and accurately.&lt;/p&gt;
&lt;p&gt;When this role is formalized, it is sometimes known as &amp;quot;Community Representative&amp;quot; or &amp;quot;&lt;a class="reference external" href="https://en.wikipedia.org/wiki/Ombudsman"&gt;Ombud&lt;/a&gt;&amp;quot; (or &amp;quot;Ombudsperson&amp;quot;, &amp;quot;Ombudsman&amp;quot;, etc). Whether this person's identity is known publicly or not, they should be reachable via a public contact address, with a prior commitment of confidentiality, so that others in the project have a way to raise concerns privately with the company when they wish to do so.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="docutils container" id="for-project"&gt;
&lt;p class="rubric" id="guidelines-for-the-open-source-project"&gt;Guidelines for the Open Source Project&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;ul class="first"&gt;
&lt;li&gt;&lt;div class="first docutils container" id="have-trademark-policy"&gt;
&lt;p&gt;Have and enforce a formal trademark and branding policy.&lt;/p&gt;
&lt;p&gt;Specify when and how the project's name and logo can be used without explicit permission, versus what uses require permission from the trademark holder. Ensure that the trademark holder is an institution that can be trusted to act in the project's long-term interests and that is not beholden to any particular commercial entities.&lt;/p&gt;
&lt;p&gt;Some examples of open source trademark policies are:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;a class="reference external" href="http://www.apache.org/foundation/marks/resources"&gt;www.apache.org/foundation/marks/resources&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="http://www.openstack.org/brand/"&gt;www.openstack.org/brand&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="http://fossmarks.org/"&gt;fossmarks.org/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="http://modeltrademarkguidelines.org/"&gt;modeltrademarkguidelines.org&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="https://wiki.postgresql.org/wiki/Trademark_Policy"&gt;wiki.postgresql.org/wiki/Trademark_Policy&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;ul class="first"&gt;
&lt;li&gt;&lt;div class="first docutils container" id="have-discussion-forums"&gt;
&lt;p&gt;Maintain discussion forums.&lt;/p&gt;
&lt;p&gt;Maintain discussion forums for developers and users of the project, make sure each forum has a written charter, and take whatever steps are necessary (e.g., moderation) to ensure that each forum remains useful for the purposes stated in its charter. All public forums should be publicly archived and have open membership.&lt;/p&gt;
&lt;p&gt;The project may also maintain non-public forums, such as a security vulnerability reporting and discussion group, but these non-public forums should still have public written charters that state their membership policy. Membership in non-public groups should be individual, but may take affiliation into account: for example, someone may be granted access to a security group in part because of their role at a commercial hosting provider that wishes to stay up-to-date with pre-release security patches. However, the potential member's discretion and trustworthiness should also be a factor, and they may retain their membership even if their affiliation with that commercial provider ends.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;ul class="first"&gt;
&lt;li&gt;&lt;div class="first docutils container" id="have-clear-governance"&gt;
&lt;p&gt;Have a written explanation of how commit access is granted.&lt;/p&gt;
&lt;p&gt;There should be no mystery about how a developer becomes one of the official maintainers of the project. Maintain a written explanation of how new committers are chosen in the project. The process can be as simple as &amp;quot;current committers vote privately to invite a new committer&amp;quot;; the important thing is to document it so that contributors whose work is commercially sponsored understand that the system is fair and that the potential for them to be invited to become a committer is dependent primarily on the technical merits of their work and on the constructiveness of their interactions with the rest of the project community, rather than on their commercial affiliations.&lt;/p&gt;
&lt;p&gt;A few projects do place a limit on the fraction of core maintainers that may be affiliated with the same organization at the same time; in general, this kind of limit should only be imposed as a last resort, when the community has tangible concerns about dominance of project direction by one entity. Remember that open source projects are voluntary social constructs&amp;nbsp;—&amp;nbsp;a project can always be forked, even by its founders. Also, if a trusted entity controls the project's trademarks, then that is a powerful incentive to commercial interests to behave well.&lt;/p&gt;
&lt;p&gt;A good example of a simple but documented procedure for gaining commit access is this one from the LibreOffice project: &lt;a class="reference external" href="https://wiki.documentfoundation.org/Development/GetUnrestrictedCommitAccess"&gt;https://wiki.documentfoundation.org/Development/GetUnrestrictedCommitAccess&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;ul class="first"&gt;
&lt;li&gt;&lt;div class="first docutils container" id="have-docs"&gt;
&lt;p&gt;Maintain documentation, and make it easy for everyone to contribute to it.&lt;/p&gt;
&lt;p&gt;One of the most common commercial anti-patterns in open source projects is the phenomenon of a company maintaining a separate set of project documentation for its customers, often of higher quality than the project's official documentation. The company should instead contribute to improving the project's public documentation&amp;nbsp;—&amp;nbsp;but this implies a reciprocal obligation on the part of the project as a whole to being receptive to such documentation improvements. The project should view commercial support providers as a valuable source of information about deficiencies in project documentation: a company whose sales depend on customers having a smooth experience will be highly sensitive to the quality of documentation, and the project should try to leverage this sensitivity for everyone's benefit.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;ul class="first"&gt;
&lt;li&gt;&lt;div class="first docutils container" id="support-coc"&gt;
&lt;p&gt;Support and enforce this code of conduct publicly.&lt;/p&gt;
&lt;p&gt;The project should publicly recognize companies that abide by this code of conduct, and (after making a good-faith attempt to remedy any misunderstandings or problems) publicly chastise companies that violate the code.&lt;/p&gt;
&lt;p&gt;One method of publicly supporting companies who formally agree to abide by the code is to publish a list of such companies on the project's web site. The same entity that enforces trademarks for the project is usually the right entity to maintain that list. Being listed on the project's official site, as a commercial support provider who is certified as abiding by the project's commercial guidelines, is a valuable advertisement; the potential for removal from that list then becomes a powerful incentive for companies to live up to their pledges.&lt;/p&gt;
&lt;p&gt;If a commercial entity is violating the code of conduct, representatives from the project may choose to contact that entity privately at first, to see if the problem can be resolved quickly&amp;nbsp;—&amp;nbsp;often such problems result from misunderstandings, particularly with companies who are unaccustomed to working in an open source environment. However, if the problem cannot be resolved to the representative's satisfaction, then it is important to publicly state the code of conduct violation, documenting it thoroughly but without rancor, and emphasizing that the project welcomes participation from that entity so long as the entity complies with the code of conduct. This statement should be posted to the appropriate project discussion forum, so that the statement and any followup posts (either from the commercial entity or from other participants in the project) are visible and indexable by Internet search engines. The representative may, of course, choose to remove the commercial entity from the list of entities that abide by the code of conduct; such removals should be announced too.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;div class="first docutils container" id="monitor-coc"&gt;
&lt;p&gt;Maintain a private contact address for reporting code-of-conduct violations.&lt;/p&gt;
&lt;p&gt;The project should maintain a private contact mechanism by which anyone may report violations of this code of conduct. It is up to the project to decide who receives and acts on such reports. There is obviously potential for conflicts of interest if representatives of commercial entities are among the recipients, but compliant commercial entities are also those most motivated to be responsive to such reports, since it is strongly in their interests to detect and stop an incipient arms race of bad behavior. One way to alleviate such conflicts is to either allow no representatives of commercial entities, or to have representatives from mulitple entities, so that there are enough participants to prevent any one participant's interests from being overrepresented.&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
</content><category term="Posts"></category></entry><entry><title>Dissecting The Myth That Open Source Software Is Not Commercial</title><link href="https://blog.opentechstrategies.com/2016/04/open_source_is_commercial/" rel="alternate"></link><published>2016-04-11T16:07:00-04:00</published><updated>2016-04-11T16:07:00-04:00</updated><author><name>Karl Fogel</name></author><id>tag:blog.opentechstrategies.com,2016-04-11:/2016/04/open_source_is_commercial/</id><content type="html">&lt;p&gt;My piece &lt;a class="reference external" href="http://blog.ieeesoftware.org/2016/04/dissecting-myth-that-open-source.html"&gt;&amp;quot;Dissecting The Myth That Open Source Software Is Not Commercial&amp;quot;&lt;/a&gt; has just been posted at the IEEE Software Blog. Comments over there, please.&lt;/p&gt;
&lt;p&gt;Many thanks to editor &lt;a class="reference external" href="https://twitter.com/zacchiro"&gt;Stefano Zacchiroli&lt;/a&gt; for editing, and for suggesting a post in the first place.&lt;/p&gt;
</content><category term="Posts"></category><category term="publications"></category></entry><entry><title>What OTS Does</title><link href="https://blog.opentechstrategies.com/2016/03/what_ots_does/" rel="alternate"></link><published>2016-03-30T21:35:00-04:00</published><updated>2016-03-30T21:35:00-04:00</updated><author><name>James Vasile, Karl Fogel</name></author><id>tag:blog.opentechstrategies.com,2016-03-30:/2016/03/what_ots_does/</id><summary type="html">&lt;p&gt;When I tell people that I work at an open source consulting company, I often get puzzled glances (or those agreeable nods that mean &amp;quot;I have no idea what you're talking about&amp;quot;). What does &amp;quot;open source consulting company&amp;quot; mean? What does OTS do, exactly?&lt;/p&gt;
&lt;div class="section" id="who-are-we"&gt;
&lt;h2&gt;Who are we?&lt;/h2&gt;
&lt;p&gt;At Open Tech …&lt;/p&gt;&lt;/div&gt;</summary><content type="html">&lt;p&gt;When I tell people that I work at an open source consulting company, I often get puzzled glances (or those agreeable nods that mean &amp;quot;I have no idea what you're talking about&amp;quot;). What does &amp;quot;open source consulting company&amp;quot; mean? What does OTS do, exactly?&lt;/p&gt;
&lt;div class="section" id="who-are-we"&gt;
&lt;h2&gt;Who are we?&lt;/h2&gt;
&lt;p&gt;At Open Tech Strategies we do open source development and process consulting for corporations, government agencies, and non-profits who want to produce or use open source software more effectively.&lt;/p&gt;
&lt;p&gt;Okay, but what does that mean?&lt;/p&gt;
&lt;div class="section" id="why-open-source"&gt;
&lt;h3&gt;Why open source?&lt;/h3&gt;
&lt;p&gt;Formally, &amp;quot;open source&amp;quot; just means software code released under a free license. But publishing code that way often turns out to have very powerful effects, so a more useful way to think of open source is as &lt;em&gt;a way of aligning your organization's goals and its production processes&lt;/em&gt;. When you are trying to extend the life or the applicability domain of a software project, improve transparency and accountability in your organization, collaborate more effectively with partners or volunteers, increase user engagement with a service, promote user privacy, or &lt;a class="reference external" href="https://accounts.openerp.com/blog/odoo-news-5/post/our-open-source-business-model-119"&gt;grow a vendor ecosystem&lt;/a&gt;, open source provides a ready-made set of practices and promises that enable your natural allies to find &amp;amp; join you in the effort.&lt;/p&gt;
&lt;p&gt;Open sourcing a project doesn't necessarily mean giving up control, except insofar as you decide that that doing so better serves your goals, but it makes it possible for a project to grow beyond the interest or budget of just one organization; we'll look at some examples of that in later blog posts. And building on open source software means that organizations don't need to pay to re-invent technological wheels like &lt;a class="reference external" href="https://www.drupal.org/"&gt;content&lt;/a&gt; &lt;a class="reference external" href="https://wordpress.org/about/"&gt;management&lt;/a&gt; or &lt;a class="reference external" href="http://www.postgresql.org/about/"&gt;databases&lt;/a&gt; and can focus on their own specific needs.&lt;/p&gt;
&lt;p&gt;(See also Ben Balter's excellent post &amp;quot;&lt;a class="reference external" href="http://ben.balter.com/2015/11/23/why-open-source/"&gt;Why open source&lt;/a&gt;&amp;quot; for a more in-depth look at why organizations choose open source.)&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="so-that-s-open-source-what-exactly-does-ots-do-though"&gt;
&lt;h2&gt;So that's open source. What exactly does OTS do, though?&lt;/h2&gt;
&lt;p&gt;Usually, I describe our work as falling into one of a few different situations: building, opening, and buying.&lt;/p&gt;
&lt;div class="section" id="example-client-1-builder"&gt;
&lt;h3&gt;Example Client #1: Builder&lt;/h3&gt;
&lt;p&gt;This first example client, Builder, needs a piece of software to complete their mission work. They might be a non-profit fighting &lt;a class="reference external" href="http://www.pcni.org/"&gt;homelessness&lt;/a&gt; or &lt;a class="reference external" href="http://enlacechicago.org/"&gt;youth violence&lt;/a&gt; or a corporation that needs a new research tool. Builder decides to use an open source custom-built solution for reasons of cost-effectiveness, transparency, or one of the other points I mentioned above. Over the course of an agile development process, we meet with the end users of the product and involve them in testing as soon as there's anything to test at all. &lt;a class="reference external" href="https://github.com/OpenTechStrategies"&gt;All of our development takes place in the open&lt;/a&gt;, and we maintain install documentation so that anyone could set up a sandbox instance of the project to try out. When this process is done, Builder has a working piece of software in production that can be set up and maintained by any software development team using our open code and documentation. Their partners can set up the same system, extend it, and share any enhancements they make with Builder. We often continue to work with the customer beyond this point, of course, but the software's &amp;quot;developer surface area&amp;quot; is now much greater than it would have been were it proprietary: both we and Builder have the ability to welcome new partners into the project, and being able to exercise that ability has proven quite useful.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="example-client-2-opener"&gt;
&lt;h3&gt;Example Client #2: Opener&lt;/h3&gt;
&lt;p&gt;Another kind of client, Opener, comes to us with an existing software product. Possible Openers are &lt;a class="reference external" href="http://www.worldwidetelescope.org/"&gt;a data visualization and outreach engine for astronomers&lt;/a&gt; or &lt;a class="reference external" href="http://www.checkbooknyc.com"&gt;a transparency tool for governments&lt;/a&gt;. While the software product is not the entirety of Opener's mission, it is a crucial part of the work and face of the organization. For Opener, we focus on code resiliency, partner collaboration, contributor engagement, and (where applicable) development of a commercial ecosystem around the project. When we complete our work with Opener, they have a usably open source project that has clearly-documented code, findable discussion forums on the web, an issue tracker in use, and all the other affordances of a well-arranged open source project. The project is well-positioned to invite new collaborators and engage users.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="example-client-3-buyer"&gt;
&lt;h3&gt;Example Client #3: Buyer&lt;/h3&gt;
&lt;p&gt;A third type of client can be called Buyer. This client is an organization that wants to use and/or contribute to open source software, but needs advice on adapting their procurement processes and on how to invest strategically in software technology. Buyer might be &lt;a class="reference external" href="https://www.cms.gov/"&gt;a government agency&lt;/a&gt; that needs to set up definitions and standards around procuring and using open source software, or could be &lt;a class="reference external" href="http://www.sloan.org/"&gt;a foundation&lt;/a&gt; or corporation that wants to invest in open source but needs some advice on how to select and support the right projects. For Buyer, OTS researches the state of the field in their area of interest and provides recommendations for investment and/or procurement routes. When we complete our work with Buyer, we often deliver a highly specific report on the best ways they can use or invest in OSS. They are prepared to interact with open source in the way that best advances their strategic goals.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="that-s-the-story-mostly"&gt;
&lt;h2&gt;That's the story (mostly).&lt;/h2&gt;
&lt;p&gt;Naturally, not everything we do falls neatly into these categories of building, opening, and buying open source software. For example, we also offer advice for companies that want their employees to be able to contribute to upstream open source projects and helps open source projects draft CLAs or think through their business strategies. If you're a Builder, Opener, or Buyer or just have questions, feel free to &lt;a class="reference external" href="http://opentechstrategies.com/#contact"&gt;reach out&lt;/a&gt;. Thanks for reading!&lt;/p&gt;
&lt;/div&gt;
</content><category term="Posts"></category></entry></feed>