<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="4.0.1">Jekyll</generator><link href="https://ghinda.com/blog/feed.xml" rel="self" type="application/atom+xml" /><link href="https://ghinda.com/blog/" rel="alternate" type="text/html" /><updated>2021-12-09T04:54:10+00:00</updated><id>https://ghinda.com/blog/feed.xml</id><title type="html">Thoughts and opinions</title><subtitle>Here I write about things that passionate me. It is just a starting point.  
</subtitle><author><name>Lucian Ghinda</name></author><entry><title type="html">A Guide to Learn Ruby in 2021 and 2022</title><link href="https://ghinda.com/blog/programming/ruby/2021/learning-ruby.html" rel="alternate" type="text/html" title="A Guide to Learn Ruby in 2021 and 2022" /><published>2021-11-13T00:00:00+00:00</published><updated>2021-11-13T00:00:00+00:00</updated><id>https://ghinda.com/blog/programming/ruby/2021/learning-ruby</id><content type="html" xml:base="https://ghinda.com/blog/programming/ruby/2021/learning-ruby.html">&lt;p&gt;I will assume that you don’t know Ruby, and you are curious about this programming language.&lt;/p&gt;

&lt;p&gt;Here is what you will find in this article:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;#what-is-ruby&quot;&gt;What is Ruby?&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#why-learn-ruby&quot;&gt;Why learn Ruby programming language&lt;/a&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;#what-other-please-are-saying&quot;&gt;What other people are saying about why learn Ruby&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#write-good-ruby-code&quot;&gt;What does it mean to write good Ruby code&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#learning-ruby-where-and-how&quot;&gt;Learning Ruby - where and how&lt;/a&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;#learning-ruby-where-and-how&quot;&gt;If Ruby will be your first programming language&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#if-you-know-how-to-code&quot;&gt;If you know how to code&lt;/a&gt;
        &lt;ul&gt;
          &lt;li&gt;&lt;a href=&quot;#learning-ruby-basics&quot;&gt;Learning Ruby basics&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href=&quot;#deep-understand-ruby&quot;&gt;Resources to deep understand Ruby&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href=&quot;#coding-challenges&quot;&gt;Competitive Programming / Coding Challenges&lt;/a&gt;&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h1 id=&quot;what-is-ruby&quot;&gt;What is Ruby?&lt;/h1&gt;

&lt;p&gt;Ruby is an interpreted, dynamic, dynamically typed, garbage-collected, high-level, objected-oriented, general-purpose, and open-source programming language.&lt;/p&gt;

&lt;p&gt;Let me explain these by one:&lt;/p&gt;

&lt;p&gt;1 Ruby is &lt;strong&gt;interpreted&lt;/strong&gt;: that means that Ruby does not compile to a binary, but it uses an interpreter to translate the code into machine code on the fly (without any intermediary step like compiling).&lt;/p&gt;

&lt;p&gt;2 Ruby is &lt;strong&gt;dynamic&lt;/strong&gt;, meaning that all static analysis needed to execute a program will happen at runtime. In this way, the type of variables can be changed while the code is running, adding new code and functionalities to existing already instantiated objects, and many more.&lt;/p&gt;

&lt;p&gt;3 Ruby is &lt;strong&gt;strongly typed&lt;/strong&gt;, meaning that if an operation needs a specific type, then the type variables/objects involved are checked before running that operation. Yet Ruby does not use static type checking: the interpreter does not enforce type constraint rules while evaluating a program. So it seems that it is correct to refer to ruby as being &lt;strong&gt;dynamically typed&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Here is a short example:&lt;/p&gt;

&lt;div class=&quot;language-ruby highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;42&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;new_var&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;string&quot;&lt;/span&gt; 
&lt;span class=&quot;c1&quot;&gt;# =&amp;gt; TypeError (String can't be coerced into Integer)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;The last line will throw a type error as Ruby will check the type of &lt;code class=&quot;highlighter-rouge&quot;&gt;var&lt;/code&gt; and the type of &lt;code class=&quot;highlighter-rouge&quot;&gt;&quot;string&quot;&lt;/code&gt; and see they are different and cannot be coerced.&lt;/p&gt;

&lt;p&gt;4  Ruby is &lt;strong&gt;garbage collected&lt;/strong&gt;, meaning there is no need for the programmer to manage memory. It has a garbage collector that knows when to free memory (when a variable/data is no longer needed and can be freed)&lt;/p&gt;

&lt;p&gt;5 Ruby is a &lt;strong&gt;high-level programming language&lt;/strong&gt; meaning that it is closer to the natural English language than to computer code, thus making the code easier to read and write. It also allows us to focus on high-level business logic and not on low-level tasks (like memory management, registers, call stacks).&lt;/p&gt;

&lt;p&gt;6  Ruby is &lt;strong&gt;object-oriented&lt;/strong&gt;, meaning that in Ruby, everything is an object. The most common way to program ruby is to do it in an Object-Oriented Programming (OOP) fashion by using classes, inheritance, compositions. Ruby also has some support for functional programming because it has its procs, and lambdas and allows passing functions as params to other functions, but doing it this way is less common in Ruby.&lt;/p&gt;

&lt;p&gt;7  Ruby is &lt;strong&gt;general-purpose&lt;/strong&gt;, meaning that you can write software in Ruby in many domains; there is no focus on supporting one domain over another.&lt;/p&gt;

&lt;p&gt;8  Ruby is &lt;strong&gt;open-source&lt;/strong&gt;, meaning that you can find the code for Ruby open and change it according to your own needs if you feel this way. Check the code for Ruby in one of the sources listed on the Ruby website:  &lt;a href=&quot;https://www.ruby-lang.org/en/community/ruby-core/&quot; title=&quot;Ruby Core&quot;&gt;Ruby Core&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In case you want to read more about what type of programming language is Ruby go to the following resources:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.ruby-lang.org/en/&quot;&gt;Official Ruby Language website&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/questions/159797/is-ruby-a-functional-language&quot;&gt;Stack Overflow question if Ruby is a functional language&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.tutorialspoint.com/ruby/ruby_overview.htm&quot;&gt;An introduction about Ruby describing Ruby features&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Type_system#DYNAMIC&quot;&gt;Wikipedia about dynamic types languages&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Ruby_(programming_language)&quot;&gt;Wikipedia about Ruby&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.rubyfleebie.com/2007/07/09/ruby-is-dynamically-and-strongly-typed/&quot;&gt;A good article explaining why Ruby is dynamic and strongly typed&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/questions/520228/is-ruby-strongly-or-weakly-typed&quot;&gt;Stack Overflow question if Ruby if Strongly or Weakly Typed&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h1 id=&quot;why-learn-ruby&quot;&gt;Why learn Ruby programming language&lt;/h1&gt;

&lt;p&gt;First, let’s start with my reasons why I like this programming language:&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;It is expressive: you can write code that will be easy to read and understand, and the language will support you with this&lt;/li&gt;
  &lt;li&gt;It is easy to think in Ruby, as it has a lot of ways to solve the same problem thus, it can match the way you think about a problem&lt;/li&gt;
  &lt;li&gt;Eco-system: it has a mature eco-system of plugins, most of them battle-tested in production, so there is no need to re-invent the wheel every time you need a solution to a common problem&lt;/li&gt;
  &lt;li&gt;Community: it has a great, passionate and active community of developers, and finding an answer to a problem you might have it is very easy&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;what-other-please-are-saying&quot;&gt;What other people are saying about why learn Ruby&lt;/h2&gt;

&lt;p&gt;I don’t want to create a comprehensive list of why Ruby is a good programming language and why it might be an excellent decision to start using it. Still, in case you are looking for more, here is a list of articles and some concise summaries for each one of them:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://learn.onemonth.com/some-people-say-ruby-is-too-complex-for-beginners/&quot;&gt;Some People Say Ruby Is Too Complex for Beginners…&lt;/a&gt; - An article by Chris Castiglione about why having multiple ways of doing the same thing is a good thing: it offers &lt;strong&gt;flexibility&lt;/strong&gt;, it creates &lt;strong&gt;space for the programmer to be creative&lt;/strong&gt;, and it does not have too many specifics to keep in mind when using language features.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://dev.to/cjbrooks12/why-do-people-like-ruby-374b&quot;&gt;A question on Dev.to&lt;/a&gt; about &lt;em&gt;“Why do people like Ruby”&lt;/em&gt; has many answers. Here are some main reasons why people are saying there that they love Ruby:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Flexibility&lt;/strong&gt; and &lt;strong&gt;expressiveness&lt;/strong&gt; makes it easy to write code with very little boilerplate&lt;/li&gt;
  &lt;li&gt;It &lt;strong&gt;“optimises for brain to code time”&lt;/strong&gt; as it is easy to write the code almost as you think&lt;/li&gt;
  &lt;li&gt;The &lt;strong&gt;code can be read like talking&lt;/strong&gt;, and it is easy to understand it&lt;/li&gt;
  &lt;li&gt;It is &lt;strong&gt;fun&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Has a &lt;strong&gt;great community&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;You can be &lt;strong&gt;incredibly productive&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Quick feedback and prototyping&lt;/strong&gt;
It will help if you read the answers there. You will also see the are some concerns and some arguments people have for those concerns.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here are two quotes that Yukihiro Matsumoto&lt;sup id=&quot;fnref:1&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:1&quot; class=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; wrote in an essay called &lt;em&gt;“Treating Code as an Essay”&lt;/em&gt; part of a book called “Beautiful Code”&lt;sup id=&quot;fnref:2&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:2&quot; class=&quot;footnote&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; which I think will describe how Ruby feels based on how its creator sees programming:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;“…lines of code are meant—before all else—to be read and understood by human beings…“&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;“Programs share some attributes with essays.&lt;/p&gt;

  &lt;p&gt;For essays, the most important question readers ask is, “What is it about?”&lt;/p&gt;

  &lt;p&gt;For programs, the main question is, “What does it do?”&lt;/p&gt;

  &lt;p&gt;In fact, the purpose should be sufficiently clear that neither question ever needs to be uttered.&lt;/p&gt;

  &lt;p&gt;Still, for both essays and computer code, it’s always important to look at how each one is written. Even if the idea itself is good, it will be difficult to transmit to the desired audience if it is difficult to understand. The style in which they are written is just as important as their purpose. Both essays and lines of code are meant—before all else—to be read and understood by human beings.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;“…it is therefore more important by far for humans to be able to understand the program than it is for the computer…“&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;“Most programs are not write-once.&lt;/p&gt;

  &lt;p&gt;They are reworked and rewritten again and again in their lives. Bugs must be debugged. Changing requirements and the need for increased functionality mean the program itself may be modified on an ongoing basis.&lt;/p&gt;

  &lt;p&gt;During this process, human beings must be able to read and understand the original code; it is therefore more important by far for humans to be able to understand the program than it is for the computer.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h1 id=&quot;write-good-ruby-code&quot;&gt;What does it mean to write good Ruby code&lt;/h1&gt;

&lt;p&gt;One thing sticks out from all these resources about why people like Ruby: it allows writing “beautiful code”.&lt;/p&gt;

&lt;p&gt;Here are some definitions for beautiful code:&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;&lt;em&gt;Yukihiro Matsumoto&lt;/em&gt; (creator of Ruby programming language) is defining beautiful code in the “Treating Code as an Essay” having the following attributes:
    &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;Brevity&lt;/strong&gt;: writing concise and brief code “because there is a definite cost involved in scanning code with the human eye, programs should ideally contain no unnecessary information.”&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Familiarity&lt;/strong&gt;: Ruby uses traditional control structures and tries to be consistent and not surprise programmers in the way it works&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Simplicity&lt;/strong&gt;: Ruby offers complex tools and shifts the complexity from the code written by the programmer to the programming language, thus allowing the creation of simple and beautiful code&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Freedom from enforcement from tools&lt;/strong&gt;: Ruby does not force you to do to things in one specific way. It is flexible enough to allow you do to things your way, to serve your purpose&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Balance&lt;/strong&gt; between the other attributes&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;em&gt;Russ Olsen&lt;/em&gt; in “Eloquent Ruby” defines Ruby style of programming as:
    &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;Crystal Clear&lt;/strong&gt;: “good code tells the reader exactly what it is trying to do. Great code shouts its intent”&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Concise&lt;/strong&gt;: “It’s much easier to understand what a method or a class is doing if you can take it all in at a glance”&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Self-descriptive&lt;/strong&gt;: “Good Ruby code should speak for itself, and most of the time you should let it do its own talking.”&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;em&gt;Hal Fulton&lt;/em&gt; in “The Ruby Way” defines the Ruby way as:
    &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;Simplicity&lt;/strong&gt;: even when doing complex things, the complexity should be pushed out of sight so that it appears simple&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Brevity&lt;/strong&gt;: “don’t write 200 lines of code when ten will do”&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Readability&lt;/strong&gt;: remember that “computers exist for humans, not humans for computers”&lt;/li&gt;
      &lt;li&gt;Following the &lt;strong&gt;Principle of the Least Surprise&lt;/strong&gt;: “the program should always respond to the user in the way that astonishes him least”&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Consistency&lt;/strong&gt; and &lt;strong&gt;Regularity&lt;/strong&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Read more resources about what does idiomatic Ruby means here:&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;&lt;a href=&quot;https://medium.com/the-renaissance-developer/idiomatic-ruby-1b5fa1445098&quot;&gt;Idiomatic Ruby: writing beautiful code&lt;/a&gt; - an article with code example about writing intuitive ruby code&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/dreamr/beautiful-ruby-code&quot;&gt;Beautiful Ruby Code&lt;/a&gt; - this is an example of a coding guideline for Ruby. Still, after learning a little bit of Ruby, I recommend installing one of these static analyzers: : &lt;a href=&quot;https://github.com/rubocop/rubocop&quot;&gt;Rubocop&lt;/a&gt; or &lt;a href=&quot;https://github.com/testdouble/standard&quot; title=&quot;Standard&quot;&gt;Standard&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;h1 id=&quot;learning-ruby-where-and-how&quot;&gt;Learning Ruby - where and how&lt;/h1&gt;

&lt;p&gt;I think there are multiple approaches to learning a programming language. I will try to recommend resources based on this, but please go ahead and skim through them however you find it useful or exciting for you.&lt;/p&gt;

&lt;h2 id=&quot;if-you-dont-know-how-to-code&quot;&gt;If Ruby is your first programming language?&lt;/h2&gt;

&lt;p&gt;If you never did programming before starting learning Ruby (or any other programming language), I recommend understanding the basics of thinking:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://pine.fm/LearnToProgram/chap_00.html&quot; title=&quot;Learn to Program by Chris Pine&quot;&gt;Learn To Program&lt;/a&gt; online book is a great tutorial to start learning to program. It is easy to follow, and it explains very well with simple examples of the programming concepts.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://ruby-for-beginners.rubymonstas.org/index.html&quot;&gt;Ruby for Beginners&lt;/a&gt; a good tutorial for beginners, created so that at the end, “you’ll be able to read, understand, and write basic Ruby code yourself”.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.freecodecamp.org/news/learning-ruby-from-zero-to-hero-90ad4eecc82d&quot; title=&quot;Learning Ruby: From Zero to Hero&quot;&gt;Learning Ruby: From Zero to Hero&lt;/a&gt;  it is a good Ruby tutorial that can one can follow even if they don’t know yet how to program.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://rubylearning.com/satishtalim/tutorial.html&quot; title=&quot;Learning Ruby Tutorials&quot;&gt;Learning Ruby Tutorial&lt;/a&gt;  this is again an excellent tutorial to start a learning program as it explains very good the basic programming concepts.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After going through the basic concepts of Ruby, the next step is to deepen your understanding of some of the core concepts:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Object-Oriented Programming, for this I recommend going through &lt;a href=&quot;https://medium.com/launch-school/the-basics-of-oop-ruby-26eaa97d2e98&quot; title=&quot;The Basics of OOP Ruby&quot;&gt;The Basics of OOP Ruby&lt;/a&gt; and then through &lt;a href=&quot;https://stackoverflow.com/questions/10525053/ruby-metaclass-confusion/10526013#10526013&quot; title=&quot;How class works in Ruby - Stackoverflow&quot;&gt;this answer about how a class works on Stackoverflow&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Understanding the Ruby Object Model: here are a couple of resources &lt;a href=&quot;http://skilldrick.co.uk/2011/08/understanding-the-ruby-object-model/&quot; title=&quot;Understanding the Ruby object model&quot;&gt;Understanding the Ruby object model&lt;/a&gt; (an old article but the main ideas are still valid), &lt;a href=&quot;https://medium.com/@pk60905/everything-is-object-in-ruby-559475ce71dd&quot; title=&quot;Everything is object in Ruby&quot;&gt;Everything is object in Ruby&lt;/a&gt; (an article building on the first one)&lt;/li&gt;
  &lt;li&gt;Singleton Class (Eigenclass): &lt;a href=&quot;https://suchdevblog.com/lessons/ExplainingRubySingletonClass.html#what-s-the-eigenclass&quot; title=&quot;Explaining Ruby Singleton Class (Eigenclass)&quot;&gt;Explaining Ruby’s Singleton Class (Eigenclass) to confused beginners&lt;/a&gt;, &lt;a href=&quot;https://gist.github.com/rsliter/4216800&quot; title=&quot;Code example about Eigenclass&quot;&gt;A gist with examples explaining Eigenclass&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After this, you should google Ruby meta-programming and read some of the resources you can find.&lt;/p&gt;

&lt;h2 id=&quot;if-you-know-how-to-code&quot;&gt;If you know how to code&lt;/h2&gt;

&lt;h3 id=&quot;learning-ruby-basics&quot;&gt;Learning Ruby basics&lt;/h3&gt;

&lt;p&gt;First, start by looking around on the official website at their documentation section: &lt;a href=&quot;https://www.ruby-lang.org/en/documentation/&quot;&gt;https://www.ruby-lang.org/en/documentation/&lt;/a&gt;. There are many links for good tutorials for IDEs, Ruby’s documentation, and more helpful information.&lt;/p&gt;

&lt;p&gt;If you already know to program in some other language, I think you can go through this short official Ruby tutorial: &lt;a href=&quot;https://www.ruby-lang.org/en/documentation/quickstart/&quot;&gt;Ruby in Twenty Minutes (ruby-lang.org)&lt;/a&gt;. It covers almost anything that you need to know about Ruby syntax.&lt;/p&gt;

&lt;p&gt;If you already know one of the following programming languages: C/C++, Java,  Perl, PHP, Python here you will find some short guides explaining similarities and differences between Ruby and each one of these languages: &lt;a href=&quot;https://www.ruby-lang.org/en/documentation/ruby-from-other-languages/&quot;&gt;Ruby From Other Languages (ruby-lang.org)&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://try.ruby-lang.org&quot;&gt;Try Ruby in Browser (ruby-lang.org)&lt;/a&gt; - Learn Ruby by using this interactive play-ground. It is a very easy quick-start without the need to install anything on your own computer.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.codecademy.com/learn/learn-ruby&quot;&gt;Learn Ruby (codecademy.com)&lt;/a&gt; - a simple course teaching ruby basic structures in a very interactive way, offering at each step an interactive terminal for practice.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://pine.fm/LearnToProgram/chap_00.html&quot;&gt;Pragmatic Programmers - Learn to Program (pine.fm)&lt;/a&gt; - this is an online book which will teach you programming concepts in Ruby. It is also a very great start to understand Ruby even if you already know programming.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://poignant.guide/book/&quot;&gt;Why’s (Poignant) Guide to Ruby (poignant.guide)&lt;/a&gt; - a very unconventional introduction in Ruby. This book is a fresh and innovative take to teach someone Ruby and it also goes in its own way more into thinking like a Rubyist.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.tutorialspoint.com/ruby/ruby_overview.htm&quot;&gt;TutorialsPoint - Learn Ruby programming (tutorialspoint.com)&lt;/a&gt; - this is a good, concise text based tutorial to learn Ruby. While not being exactly creates as an interactive first learning experience, for each piece of code has a link for a live demo of the code where you can tinker with it as you like.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://rubylearning.com/satishtalim/tutorial.html&quot;&gt;RubyLearning (rubylearning.com)&lt;/a&gt; - while not an interactive tutorial like others, it has good examples of the structure and syntax of Ruby.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://launchschool.com/books/ruby&quot;&gt;Introduction to Programming with Ruby (launchschool.com)&lt;/a&gt; an online book about Ruby syntax and standard library&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=t_ispmWmdjY&quot;&gt;Video From freeCodeCamp.org about learning Ruby (youtube.com)&lt;/a&gt; - is a 4 hours Ruby introduction video while building some small learning programs (like building a calculator, a guessing game)&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.fincher.org/tips/Languages/Ruby/&quot;&gt;Ruby Tutorial with Code Samples (fincher.org)&lt;/a&gt; - a simple tutorial to learn Ruby.&lt;/p&gt;

&lt;p&gt;This video course from Pragmatic Studio &lt;a href=&quot;https://pragmaticstudio.com/ruby&quot;&gt;https://pragmaticstudio.com/ruby&lt;/a&gt; seems very well organised and touches the most important topics for learning Ruby.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.apress.com/gp/book/9781484263235&quot;&gt;Beginning Ruby 3&lt;/a&gt; is an introductory book for Ruby teaching the latest Ruby idioms. It also goes through everything needed to be productive in Ruby.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.manning.com/books/the-well-grounded-rubyist-third-edition&quot;&gt;The Well-Grounded Rubyist&lt;/a&gt; is a very good book with examples and clear explanation about when and why to use various Ruby language features.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.pluralsight.com/courses/ruby-big-picture&quot;&gt;Ruby: The Big Picture&lt;/a&gt; is an up to date guide to learn Ruby and it explores Ruby core features, objects, metaprogramming and Ruby ecosystem.&lt;/p&gt;

&lt;p&gt;Other type of resources which offer a short introduction to Ruby:&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.freecodecamp.org/news/learning-ruby-from-zero-to-hero-90ad4eecc82d/&quot;&gt;Learning Ruby: From Zero to Hero&lt;/a&gt; - on freeCodeCamp, a long version article with a quick introduction to Ruby&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://medium.com/rubycademy/unlearn-programming-to-learn-ruby-b1cbc5e2fed&quot;&gt;Unlearn Programming to Learn Ruby&lt;/a&gt; - an article more about how to think when solving a problem with Ruby&lt;/li&gt;
&lt;/ol&gt;

&lt;h3 id=&quot;deep-understand-ruby&quot;&gt;Resources to deep understand Ruby&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://rubykoans.com&quot;&gt;RUBY KOANS&lt;/a&gt; - it is a list of learning exercises where you need to fix a failed test to make it pass. While fixing it you will learn more about Ruby.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/ruby/spec&quot;&gt;Ruby Specs&lt;/a&gt; - this is not an official documentation but I recommend you just go ahead and read some of the language specs here. It is very well written and can teach you a lot about how Ruby works.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.freecodecamp.org/news/introduction-to-object-oriented-programming-with-ruby-d594e1c6eebe/&quot;&gt;An introduction to Object Oriented Programming in Ruby (freecodecamp.org)&lt;/a&gt; about OOP in Ruby. Check also this tutorial also on freeCodeCamp.org about &lt;a href=&quot;https://www.freecodecamp.org/news/an-introduction-to-object-oriented-programming-with-ruby-73531e2b8ddc/&quot;&gt;Object Oriented Programming in Ruby (freecodecamp.org)&lt;/a&gt;. In general &lt;a href=&quot;https://www.freecodecamp.org/news/tag/ruby/&quot;&gt;freeCodeCamp.org&lt;/a&gt; is a very good place to learn more about Ruby.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://learnbyexample.github.io/learn_ruby_oneliners/cover.html&quot;&gt;Ruby Oneliners&lt;/a&gt; is a collection of practical one liners Ruby code to solve various day-to-day needs.&lt;/p&gt;

&lt;p&gt;The Meta-programming Ruby book teaches you how to do meta-programming in Ruby &lt;a href=&quot;https://pragprog.com/titles/ppmetr2/metaprogramming-ruby-2/&quot;&gt;https://pragprog.com/titles/ppmetr2/metaprogramming-ruby-2/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://gorails.com/episodes?q=Ruby&quot;&gt;GoRails Ruby Lessons&lt;/a&gt; This is a great collection of many Ruby lessons exploring various pragmatic topics. I suggest to start with &lt;a href=&quot;https://gorails.com/episodes/ruby-http-server-from-scratch?autoplay=1&quot;&gt;HTTP Server in Ruby from Scratch&lt;/a&gt; where you will not only learn more Ruby but also explore some topics about how other Ruby HTTP servers work.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.poodr.com&quot;&gt;Practical Object-Oriented Design, An Agile Primer Using Ruby (POODR)&lt;/a&gt; A book that goes deeply into object oriented design and can teach you a lot about how to organise your code, what goes where when thinking about classes and modules. It also goes deepling into explaining composition and inheritance.&lt;/p&gt;

&lt;h3 id=&quot;coding-challenges&quot;&gt;Competitive Programming / Coding Challenges&lt;/h3&gt;

&lt;p&gt;The following list of app can be used mostly to learn or deepen your understanding of algorithms.&lt;/p&gt;

&lt;p&gt;I recommend &lt;a href=&quot;https://www.codewars.com/?language=ruby&quot;&gt;Codewars.com&lt;/a&gt; which has a very good collection of problems to be solved in Ruby with their own code editor and will run automatic test suites to check your code. Codewars has a very good gamification where you can earn points by solving katas.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.hackerrank.com&quot;&gt;Hackerrank.com&lt;/a&gt; has a section named “Skills Available for Practice” where you can choose Ruby and see a lot of problems that you can solve with Ruby. It has their own code editor and will check your solution by running a batch of tests on it. You can also have access to read other people solutions and see how you can make yours better.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.hackerearth.com&quot;&gt;Hackerearth.com&lt;/a&gt; is another competitive programming or coding challenge platform. Also here you might find a Practice section where there is a mix between tutorials and problems to be solved. They have their own code editor and can run tests to check your solution.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://coderbyte.com/starter-course/learn-ruby-in-one-week&quot;&gt;Coderbyte.com&lt;/a&gt; offers a course with all lessons free and some challenges (some of them are paid) to learn Ruby. Lessons are in video format and challenges have an in-browser code editor which can run a test suite to check your solution.&lt;/p&gt;

&lt;p&gt;Go back to &lt;a href=&quot;/blog/programming/2021/learning-ruby-on-rails.html&quot;&gt;“Learn Ruby on Rails Guide”&lt;/a&gt;&lt;/p&gt;

&lt;h4 id=&quot;notes&quot;&gt;Notes:&lt;/h4&gt;

&lt;div class=&quot;footnotes&quot; role=&quot;doc-endnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:1&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Yukihiro_Matsumoto&quot;&gt;Yukihiro Matsumoto&lt;/a&gt; is the creator of the Ruby programming language &lt;a href=&quot;#fnref:1&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:2&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;&lt;a href=&quot;https://www.oreilly.com/library/view/beautiful-code/9780596510046/&quot;&gt;Beautiful Code&lt;/a&gt; “In this unique and insightful book, leading computer scientists offer case studies that reveal how they found unusual, carefully designed solutions to high-profile projects. You will be able to look over the shoulder of major coding and design experts to see problems through their eyes” &lt;a href=&quot;#fnref:2&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;</content><author><name>{&quot;twitter&quot;=&gt;&quot;lucianghinda&quot;}</name></author><category term="programming" /><category term="languages" /><category term="ruby" /><category term="learning" /><category term="howtolearn" /><category term="guide" /><summary type="html">I will assume that you don’t know Ruby, and you are curious about this programming language.</summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://ghinda.com/blog/assets/images/cards/learning-ruby.png" /><media:content medium="image" url="https://ghinda.com/blog/assets/images/cards/learning-ruby.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Learning Ruby on Rails - a guide about the WHY and the HOW</title><link href="https://ghinda.com/blog/programming/2021/learning-ruby-on-rails.html" rel="alternate" type="text/html" title="Learning Ruby on Rails - a guide about the WHY and the HOW" /><published>2021-09-19T00:00:00+00:00</published><updated>2021-09-19T00:00:00+00:00</updated><id>https://ghinda.com/blog/programming/2021/learning-ruby-on-rails</id><content type="html" xml:base="https://ghinda.com/blog/programming/2021/learning-ruby-on-rails.html">&lt;p&gt;There are multiple ways to build web applications in 2021, more will probably spring in 2022. All have their pros and cons.&lt;/p&gt;

&lt;p&gt;I will try to convince you - the reader - why I think you should choose Ruby on Rails by explaining what Ruby is and what is Ruby on Rails and then giving you some ideas about projects that you can build while learning to deepen your understanding.&lt;/p&gt;

&lt;p&gt;I feel that we can do more as a Ruby community to help people experiement and embrace Ruby. There are a lot of resources available to learn Ruby, but I believe there are not enough up-to-date resources helping to transition to Ruby.&lt;/p&gt;

&lt;p&gt;I don’t plan to create a new resource to teach Ruby itself or Rails, but more of a quide of existing resources available around.&lt;/p&gt;

&lt;p&gt;Here are the reasons why I think Ruby on Rails is a good choice in 2022:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;It has a mature/battle-tested eco-system of plugins (they are called “gems”). You can find gems for authentication, for testing, for integration with a wide range of third parties (from AWS to Mailchimp, Twillio …)&lt;/li&gt;
  &lt;li&gt;The Majority of IDEs are offering good support for developing in Ruby (&lt;a href=&quot;https://www.jetbrains.com/ruby/&quot;&gt;RubyMine&lt;/a&gt;, &lt;a href=&quot;https://www.sublimetext.com&quot;&gt;Sublime Text&lt;/a&gt;, &lt;a href=&quot;https://vimawesome.com/?q=ruby&quot;&gt;VIM&lt;/a&gt;, &lt;a href=&quot;https://marketplace.visualstudio.com/search?term=ruby&amp;amp;target=VSCode&amp;amp;category=All%20categories&amp;amp;sortBy=Relevance&quot;&gt;Visual Studio Code&lt;/a&gt; and many more). If you are searching for a good auto-completion I recommend &lt;a href=&quot;https://www.tabnine.com&quot;&gt;TabNine&lt;/a&gt;, it has a great support for Ruby on Rails.&lt;/li&gt;
  &lt;li&gt;Ruby is a language that is evolving, sometimes at the forefront of programming language innovation, sometimes borrowing great concepts from other languages, and oriented toward developer happiness.&lt;/li&gt;
  &lt;li&gt;The community is welcoming, has great conversations, helpful responses, encouraging contribution, caring about new people joining in.&lt;/li&gt;
  &lt;li&gt;Rails is a web framework that is actively maintained, used by big websites like Basecamp, Github, Gitlab, Shopify and many more. It is a framework developed to solve practical problems and offer pragmatical solutions for everyday developer tasks. It inspires me to a calm rhythm of development that covers many needs for you.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;There might be other reasons to learn Ruby and Rails (or other Ruby web framework) and I will write about them in deep in the next articles I will publish here.&lt;/p&gt;

&lt;p&gt;This is somehow a guide I cobbled together with the following objectives:&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;The first part will be about &lt;a href=&quot;/blog/programming/ruby/2021/learning-ruby.html&quot;&gt;“Understanding what Ruby is, why choose Ruby, and where to learn Ruby”&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;The second part will be about “Understanding what Rails is, why choose Rails, and how to start learning the Ruby on Rails web framework”&lt;/li&gt;
  &lt;li&gt;Then, I plan to give you some ideas of projects to build while learning Rails&lt;/li&gt;
  &lt;li&gt;At the end, I will have some recommendations of communities, developers, and blogs to follow.&lt;/li&gt;
&lt;/ol&gt;</content><author><name>{&quot;twitter&quot;=&gt;&quot;lucianghinda&quot;}</name></author><category term="programming" /><category term="languages" /><category term="ruby" /><category term="rails" /><category term="rubyonrails" /><category term="guide" /><summary type="html">There are multiple ways to build web applications in 2021, more will probably spring in 2022. All have their pros and cons.</summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://ghinda.com/blog/assets/images/cards/ruby-on-rails-guide.png" /><media:content medium="image" url="https://ghinda.com/blog/assets/images/cards/ruby-on-rails-guide.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Product Engineers - or how to balance speed and quality</title><link href="https://ghinda.com/blog/teams/2020/product-engineers-balancing-quality-with-speed.html" rel="alternate" type="text/html" title="Product Engineers - or how to balance speed and quality" /><published>2020-08-24T00:00:00+00:00</published><updated>2020-08-24T00:00:00+00:00</updated><id>https://ghinda.com/blog/teams/2020/product-engineers-balancing-quality-with-speed</id><content type="html" xml:base="https://ghinda.com/blog/teams/2020/product-engineers-balancing-quality-with-speed.html">&lt;p&gt;There are many writings about the struggle between the speed of feature development and quality of code, products, tests, or any other work product used in the development process.&lt;/p&gt;

&lt;p&gt;A short answer is to not sacrifice one for the other.&lt;/p&gt;

&lt;p&gt;Here I will focus more on the “how” to achieve this at the level of an organization, focusing on development.&lt;/p&gt;

&lt;p&gt;Here are some of my thoughts on creating a product organization that can rapidly, iteratively, and simultaneously have the right level of quality.&lt;/p&gt;

&lt;h1 id=&quot;focus-on-creating-product-engineers&quot;&gt;Focus on creating Product Engineers&lt;/h1&gt;

&lt;p&gt;I think the base of creating a product organization is helping your colleagues become Product Engineers. If this is the first time, you hear about this role &lt;a href=&quot;https://blog.pragmaticengineer.com/the-product-minded-engineer/&quot;&gt;(The product-minded engineer) is a great article&lt;/a&gt; explaining what a product engineer is. I will write here the main points from that article:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Proactive with product ideas/opinions&lt;/li&gt;
  &lt;li&gt;Interest in the business, user behavior and data on this&lt;/li&gt;
  &lt;li&gt;Curiosity and a keen interest in “why?”&lt;/li&gt;
  &lt;li&gt;Strong communicators and excellent relationships with non-engineers&lt;/li&gt;
  &lt;li&gt;Offering product/engineering tradeoffs upfront&lt;/li&gt;
  &lt;li&gt;Pragmatic handling of edge cases&lt;/li&gt;
  &lt;li&gt;Quick product validation cycles&lt;/li&gt;
  &lt;li&gt;End-to-end product feature ownership&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The article has some excellent advice for anyone who wants to become a product engineer.&lt;/p&gt;

&lt;p&gt;Now let’s explore what the organization can do to help people transition in becoming product engineers.&lt;/p&gt;

&lt;h2 id=&quot;1-facilitate-direct-communication-with-the-end-user&quot;&gt;1. Facilitate direct communication with the end-user&lt;/h2&gt;

&lt;p&gt;Without direct communication between your engineers and end-users, there is no possibility of having product engineers.&lt;/p&gt;

&lt;p&gt;No persona or narrative will create the same connection and empathy as the direct interaction with the end-user. I am not saying that personas/avatars/narratives are bad. They are important to remember, to capture stories, facts … but they will not create a drive; they cannot sustain proactivity; it is hard to identify possible edge cases, which might be new products or new features. They also eliminate a human connection.&lt;/p&gt;

&lt;p&gt;There are multiple ways to facilitate this communication. I will just remind you here of two: User Interviews and Design Thinking. User interviews are easy to start with, but I will suggest going into Design Thinking to engage your end-users truly.&lt;/p&gt;

&lt;p&gt;Here is a little checking you can do to see where you are:&lt;/p&gt;

&lt;p&gt;How many people from your team talked live or online directly with an end-user? If you are less than 50%, this is a bad sign that your team is disconnected from the end-user, and probably they don’t deeply understand the value they create for the end-user.&lt;/p&gt;

&lt;h2 id=&quot;2-delegate-more-product-decisions-to-engineers&quot;&gt;2. Delegate more product decisions to engineers&lt;/h2&gt;

&lt;p&gt;Only after making possible the first point, the organization should facilitate delegation of more product decisions to engineers.&lt;/p&gt;

&lt;p&gt;It goes mostly toward transforming the role of the Product Manager to a mentor/coach of the team in helping the team understand the vision and support them in finding ways to achieve it. This will be a hard role for Product Manager, and she will play here a role of a tester, challenging team assumptions, asking for metrics, showing a mirror for the team from a product perspective and making sure feedback goes back to the team no matter if a feature was a success or not.&lt;/p&gt;

&lt;p&gt;It might seem that in the short term, this might decrease the successful features released, but in the long term, this will truly create the best teams and will allow you to scale up as much as possible without losing the initial sync with the user and the product.&lt;/p&gt;

&lt;p&gt;Reality check:&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;Who is writing the requirements? POs or the team? If only POs, then you score lower on this. POs should help the team define goals, vision, and objectives, but the team should manage their requirements. If they cannot write requirements, they don’t understand the end-user.&lt;/li&gt;
  &lt;li&gt;Does your team have access to business metrics? If not, they cannot handle product decisions because they cannot assess their decision-making process and cannot adapt.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;3-open-feedback-from-users&quot;&gt;3. Open feedback from users&lt;/h2&gt;

&lt;p&gt;How does your team handle open to feedback from end-users? 
When an end-user complains, what does your team do? Do they get upset? Do they blame the end-user? Are they indifferent?&lt;/p&gt;

&lt;p&gt;Getting upset together with a lack of action is a bad smell for the product’s understanding of the team. The same goes for indifference or blaming the user.&lt;/p&gt;

&lt;p&gt;The right mindset is a curiosity to find you what happened, to explain why.&lt;/p&gt;

&lt;p&gt;Here the organization has a crucial role in how it handles failure.&lt;/p&gt;

&lt;p&gt;If failure appears as something terrible and unrecoverable, then no curiosity is possible. People will try to hide it as quickly as possible.&lt;/p&gt;

&lt;h2 id=&quot;4-testers-as-representatives-of-end-users&quot;&gt;4. Testers as representatives of end-users&lt;/h2&gt;

&lt;p&gt;The organization should support testers to become representative of end-users. They should be the ones who point out that this feature does not provide value for the end-user, or this flow is too long.&lt;/p&gt;

&lt;p&gt;Testers should become the go-to for any team member who wants to validate/invalidate an assumption.&lt;/p&gt;

&lt;p&gt;Also, testers should test assumptions made by product managers to validate that what is built is needed by the end-users. This is an essential point because the work of product managers should also have associated tests. Reviewing requirements is not testing product assumptions. It mostly tests how the requirements are written. To test product assumptions means to ask questions about what the end-user wants and how well our product can solve user problems.&lt;/p&gt;

&lt;h2 id=&quot;5-working-in-plain-sight-with-assumptions&quot;&gt;5. Working in plain sight with assumptions&lt;/h2&gt;

&lt;p&gt;The team should acknowledge their product assumptions, detail them, and find ways to measure validity.&lt;/p&gt;

&lt;p&gt;The market/end-users should finally make the validate step of an assumption. Any other validation should be looked at as being flawed and used only when there is time pressure or a limited budget.&lt;/p&gt;

&lt;h2 id=&quot;6-support-ideas-from-anyone&quot;&gt;6. Support ideas from anyone&lt;/h2&gt;

&lt;p&gt;Another way to support your developers and testers to be more involved in the product is to consider their ideas. Don’t just dismiss them because they are technical. A lot of innovation in IT comes at the crossroads between what is technically possible and how that can be used to solve in a new way user’s problem.&lt;/p&gt;

&lt;p&gt;I know that the first thing that comes into mind is to form a kind of jury with people from business and technical and invite team members to pitch there. It is a good idea if and only if the team members are encouraged to understand what a product decision is.&lt;/p&gt;

&lt;p&gt;Don’t just vote what ideas are okay and which not, but explain to the team members why and the idea is not suitable for the product or end-users. Have a debate about that and encourage them to get real feedback from users before pitching their ideas.&lt;/p&gt;

&lt;h2 id=&quot;7-be-more-narrative-and-explain-decisions&quot;&gt;7. Be more narrative and explain decisions&lt;/h2&gt;

&lt;p&gt;Especially when working remotely, communication about why a decision was taken, and how the decision-maker got it is very important.&lt;/p&gt;

&lt;p&gt;This is more important if you want to empower your engineers to become product engineers.&lt;/p&gt;

&lt;p&gt;Here is an example of what should be shared when presenting a new feature:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Who are the users who will mostly use this?&lt;/li&gt;
  &lt;li&gt;What problems will solve for them? How are they solving their problem now, if any?&lt;/li&gt;
  &lt;li&gt;Why do we think the users will adopt this feature?&lt;/li&gt;
  &lt;li&gt;Why is this feature more important than others in our queue?&lt;/li&gt;
  &lt;li&gt;What are some assumptions that we took into consideration when deciding this?&lt;/li&gt;
  &lt;li&gt;What are some metrics that will show the success of the feature?&lt;/li&gt;
  &lt;li&gt;What are some metrics that will show the failure of the feature?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This could be a starting point to have a conversation about a proposed feature by a product manager, and the most important thing to focus on is the word &lt;em&gt;conversation&lt;/em&gt;. It is not only about writing answers to these but having a conversation about the feature with the team and openly answer their questions.&lt;/p&gt;</content><author><name>{&quot;twitter&quot;=&gt;&quot;lucianghinda&quot;}</name></author><category term="careers" /><category term="products" /><category term="quality" /><category term="speed" /><summary type="html">There are many writings about the struggle between the speed of feature development and quality of code, products, tests, or any other work product used in the development process.</summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://ghinda.com/blog/assets/images/cards/product-engineers.png" /><media:content medium="image" url="https://ghinda.com/blog/assets/images/cards/product-engineers.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Product Managers should explain their decisions</title><link href="https://ghinda.com/blog/shorts/2020/product-manager-should-explain-their-decisions.html" rel="alternate" type="text/html" title="Product Managers should explain their decisions" /><published>2020-08-09T00:00:00+00:00</published><updated>2020-08-09T00:00:00+00:00</updated><id>https://ghinda.com/blog/shorts/2020/product-manager-should-explain-their-decisions</id><content type="html" xml:base="https://ghinda.com/blog/shorts/2020/product-manager-should-explain-their-decisions.html">&lt;p&gt;&lt;img src=&quot;https://ghinda.com/blog//assets/images/articles/2020/08/product-owner-narrative.png&quot; alt=&quot;Quote from The Professional Product Owner Book&quot; class=&quot;full-width-img rounded shadow&quot; /&gt;&lt;/p&gt;

&lt;p&gt;One important thing when creating a customer-oriented organization or even a product organisation is facilitating an understanding of how to make product decisions for everyone in the company.&lt;/p&gt;

&lt;p&gt;The Product Managers should explain how they arrived at a decision when they communicate with the development teams what feature to create.&lt;/p&gt;

&lt;p&gt;This communication should include at least:&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;What is the data used to decide?&lt;/li&gt;
  &lt;li&gt;How was the data acquired?&lt;/li&gt;
  &lt;li&gt;Who is the target group that is mainly using the new feature?&lt;/li&gt;
  &lt;li&gt;What were assumptions about the target group made while deciding what features should be done?&lt;/li&gt;
  &lt;li&gt;What were the features they said NO, and what trade-offs were made when choosing what to do and what not to do?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I would add to this list one more:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;“What data/information/logic would you need to make you change your mind?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This approach is a data-driven one, and it is the one that facilitates the best cooperation in the organization.&lt;/p&gt;

&lt;p&gt;It could also be that a Product Manager takes a decision based on a vision of the future, based on a “feeling” of the future, not only based on data. 
In this case, communicate what the vision of the future is and what makes it probable.&lt;/p&gt;

&lt;p&gt;I know that some Product Managers are maybe afraid to talk with their teams about why they decided to say yes to a feature. They might be afraid that the team will not embrace the feature or, worse, debate the decision, which might seem like a time lost.&lt;/p&gt;

&lt;p&gt;Hiding these things will either:&lt;/p&gt;

&lt;p&gt;(a) Make the team more dependable on the Product Manager, and every time they have a lack of understanding, they will stop and ask guidance, creating a delayed delivery.&lt;/p&gt;

&lt;p&gt;or&lt;/p&gt;

&lt;p&gt;(b) Support a mindset of no questions asked, which then creates a culture with low creativity and innovation as the development teams are far away from the end-user and their needs. So they cannot generate useful ideas for the business.&lt;/p&gt;

&lt;p&gt;One cannot be a customer-oriented organization if only a few people understand the customers. I think it is very important for Product Managers to present a narrative from the point of view of the customer for each product decision.&lt;/p&gt;</content><author><name>{&quot;twitter&quot;=&gt;&quot;lucianghinda&quot;}</name></author><category term="shorts" /><category term="productmanagement" /><category term="decisions" /><category term="freedom" /><summary type="html"></summary></entry><entry><title type="html">Management of open source licenses</title><link href="https://ghinda.com/blog/opensource/2020/managing-licenses-for-an-open-source-project.html" rel="alternate" type="text/html" title="Management of open source licenses" /><published>2020-07-27T00:00:00+00:00</published><updated>2020-07-27T00:00:00+00:00</updated><id>https://ghinda.com/blog/opensource/2020/managing-licenses-for-an-open-source-project</id><content type="html" xml:base="https://ghinda.com/blog/opensource/2020/managing-licenses-for-an-open-source-project.html">&lt;p&gt;I usually not read a licenses of packages I am using. 
I just click on the License file of a package I want to install, but I don’t look further to its dependencies.&lt;/p&gt;

&lt;p&gt;Now that I am starting &lt;a href=&quot;https://ghinda.com/blog/opensource/2020/start-open-source-project.html&quot;&gt;an open-source project&lt;/a&gt; and learning about various open-source licenses, I am more aware of the implications of licenses included in a project.&lt;/p&gt;

&lt;p&gt;This is how I discovered the fantastic gem named &lt;a href=&quot;https://github.com/github/licensed&quot;&gt;Licensed&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;As my project is developed in Ruby on Rails this gem satisfies my needs as it has support for Rubygems and NPM packages.&lt;/p&gt;

&lt;p&gt;Here is how Licensed can be used in a Ruby on Rails project to manage licenses&lt;/p&gt;

&lt;h2 id=&quot;choose-allowed-licenses&quot;&gt;Choose allowed licenses&lt;/h2&gt;

&lt;p&gt;The first step is to choose what type of licenses do you want to have in your project. This decision should be made after you choose a license for your own project. Because not all licenses can be combined between them, their combination will sometimes impose some behaviors on your project.&lt;/p&gt;

&lt;p&gt;In the end, you should have a list of licenses that you are ok with, including in your project.&lt;/p&gt;

&lt;h2 id=&quot;install-the-licensed-gem&quot;&gt;Install the licensed gem&lt;/h2&gt;

&lt;p&gt;In case you have Ruby installed in your system, then this is as simple as:&lt;/p&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;gem install licensed
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/github/licensed#installation&quot;&gt;Here&lt;/a&gt; are the full instructions provided by Licensed gem to install it.&lt;/p&gt;

&lt;h2 id=&quot;create-a-licensedyml-file&quot;&gt;Create a .licensed.yml file&lt;/h2&gt;

&lt;p&gt;Next, you should create a &lt;code class=&quot;highlighter-rouge&quot;&gt;.licensed.yml&lt;/code&gt; file in your root directory. 
The possible settings that can be set in this file are described &lt;a href=&quot;https://github.com/github/licensed/blob/master/docs/configuration.md&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The most critical parts for now are:&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;Defining sources&lt;/li&gt;
  &lt;li&gt;Defining allowed licenses&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Here is how the file looks for me:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sources:
 bundler: true
 npm: true

allowed:
 - mit
 - apache-2.0
 - bsd-2-clause
 - bsd-3-clause
 - isc
 - cc0-1.0
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This is a standard configuration that I recommend for a standard Ruby on Rails project based on non-left copy licenses. All these licenses allows anyone to do almost anything with your project with the only restriction being that they must mention the creator. I wrote an extensive guide about MIT, Apache 2.0 and BSD &lt;a href=&quot;https://ghinda.com/blog/opensource/2020/open-source-licenses-apache-mit-bsd.html&quot;&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can check now what kind of dependencies your project has by using:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;licensed list
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This will list all your dependencies.&lt;/p&gt;

&lt;h2 id=&quot;cache-dependencies-and-metadata&quot;&gt;Cache dependencies and metadata&lt;/h2&gt;
&lt;p&gt;The next step is to cache all dependencies and their license metadata in a file.
Licensed needs this, and you also need this to keep track when a package changes license.&lt;/p&gt;

&lt;p&gt;To generate the cache simply execute:&lt;/p&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;licensed cache
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;This will create a directory &lt;code class=&quot;highlighter-rouge&quot;&gt;.licenses/&lt;/code&gt; and you will find there a tree structure of directory and files matching your source and dependencies.&lt;/p&gt;

&lt;p&gt;I committed this entire directory to Git to have version control.&lt;/p&gt;

&lt;h2 id=&quot;verify-licenses-against-an-allowed-list&quot;&gt;Verify licenses against an allowed list&lt;/h2&gt;

&lt;p&gt;To verify if licenses of dependencies are in the allowed list execute:&lt;/p&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;licensed status
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;This will check licenses and display a list of licenses which need review.&lt;/p&gt;

&lt;h2 id=&quot;review-licenses&quot;&gt;Review licenses&lt;/h2&gt;

&lt;p&gt;Next step, you should open each .yml files pointed by the status command and check the licenses there.&lt;/p&gt;

&lt;p&gt;I found three cases:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;Truly a package has a license that is not compatible with what I have in my allowed list. In this case, I tried to replace the package. This is the actual case why you should use this gem. To find this kind of package and then decide if you want to change your license (or allowed licenses) to include this package or find alternatives, maybe including implementing the functionality yourself.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;A package has one of the allowed licenses by their license file has some non-significant diffs, like extra lines, or formatting. In this case, you should open the configuration file &lt;code class=&quot;highlighter-rouge&quot;&gt;.licenses.yml&lt;/code&gt; and add a section names ```reviewed where you would put the path until the package in .yml format.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Here is an example:&lt;/p&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;reviewed:
    bundler: 
     - activerecord # MIT License
      - concurrent-ruby # MIT License
      - puma # BSD 3 clause
      - rexml # BSD 2 clause
      - sqlite3 # BSD 3 clause as specified here https://github.com/sparklemotion/sqlite3-ruby/blob/master/sqlite3.gemspec
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;As you can see &lt;a href=&quot;https://github.com/rails/rails/blob/master/activerecord/MIT-LICENSE&quot;&gt;here&lt;/a&gt; actually, the license of ActiveRecord is MIT License, but the gem was not able to identify it as such. If you look at &lt;a href=&quot;https://spdx.org/licenses/MIT.html&quot;&gt;SPDX MIT license&lt;/a&gt; and &lt;a href=&quot;https://github.com/rails/rails/blob/master/activerecord/MIT-LICENSE&quot;&gt;ActiveRecord license file&lt;/a&gt; you will see that AR license has an extra line about &lt;code class=&quot;highlighter-rouge&quot;&gt;Arel originally copyright&lt;/code&gt; and this is why this gem was not able to identify it correctly.&lt;/p&gt;

&lt;ol start=&quot;3&quot;&gt;
  &lt;li&gt;Another case is that you will discover a new type of license that you did not think before. In this case, you should read it and then decide if you want to add it in the allowed list of not.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;rerun-licensed-status&quot;&gt;Rerun licensed status&lt;/h2&gt;

&lt;p&gt;Whenever you change something in the .licensed.yml config file or add/remove a package, you should rerun&lt;/p&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;licenses status
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;ci-github-configuration&quot;&gt;CI Github configuration&lt;/h2&gt;

&lt;p&gt;I wanted to make sure that the license check will happen every time someone will push something upstream, so I created a workflow on Github with the following content:&lt;/p&gt;

&lt;script src=&quot;https://gist.github.com/lucianghinda/ec2681838dd64886fc525afbcf0e07ff.js&quot;&gt;&lt;/script&gt;

&lt;p&gt;This will run the licenses status command and report if it will detect any license which is not allowed.&lt;/p&gt;

&lt;h2 id=&quot;final-words&quot;&gt;Final words&lt;/h2&gt;

&lt;p&gt;Here is the full &lt;a href=&quot;https://gist.github.com/lucianghinda/e1bc1422d3eb233ccc85a649368dd182&quot;&gt;.licensed.yml file&lt;/a&gt;:&lt;/p&gt;

&lt;script src=&quot;https://gist.github.com/lucianghinda/e1bc1422d3eb233ccc85a649368dd182.js&quot;&gt;&lt;/script&gt;

&lt;p&gt;Also, find the example of the Verify Licenses Github Actions workflow &lt;a href=&quot;https://gist.github.com/lucianghinda/ec2681838dd64886fc525afbcf0e07ff&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;</content><author><name>{&quot;twitter&quot;=&gt;&quot;lucianghinda&quot;}</name></author><category term="opensource" /><category term="howto" /><category term="licenses" /><summary type="html">I usually not read a licenses of packages I am using. I just click on the License file of a package I want to install, but I don’t look further to its dependencies.</summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://ghinda.com/blog/assets/images/cards/managing_licenses.png" /><media:content medium="image" url="https://ghinda.com/blog/assets/images/cards/managing_licenses.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Employee engagement starts with how your organisation reacts to failure</title><link href="https://ghinda.com/blog/shorts/2020/allowing-failure-in-organisation.html" rel="alternate" type="text/html" title="Employee engagement starts with how your organisation reacts to failure" /><published>2020-07-20T00:00:00+00:00</published><updated>2020-07-20T00:00:00+00:00</updated><id>https://ghinda.com/blog/shorts/2020/allowing-failure-in-organisation</id><content type="html" xml:base="https://ghinda.com/blog/shorts/2020/allowing-failure-in-organisation.html">&lt;p&gt;&lt;img src=&quot;https://ghinda.com/blog//assets/images/articles/2020/07/peopleware-quote-allow-failure.png&quot; alt=&quot;Peopleware Quote about failure&quot; class=&quot;full-width-img rounded shadow&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Before going into creating a significant strategy for employee engagement or for building an innovation culture, the first start is to look around and answer the question: How do we react to failure?&lt;/p&gt;

&lt;p&gt;A culture where no one wants to make mistakes shrinks creativity and innovation. No one will take any chances to do something wrong so no experimentation will happen.&lt;/p&gt;

&lt;p&gt;This is a short path toward a place where everybody does the same and says the same. Feedback will become just a formality due to the fear of failure. Everybody will say things are ok even when they are not.&lt;/p&gt;

&lt;p&gt;This part with feedback is a second wave of putting a company down because the leadership will become disconnected from the reality of the company. So changing things will become harder and harder thus making the adaptation to new realities heavy and costing a lot.&lt;/p&gt;

&lt;p&gt;The cost is not only about the money, but it is a cost of time. People will try to hide failure, making learning take a lot of time. Thus the company will fail in the end to adapt to the market and remain behind.&lt;/p&gt;</content><author><name>{&quot;twitter&quot;=&gt;&quot;lucianghinda&quot;}</name></author><category term="shorts" /><category term="failure" /><category term="organisations" /><category term="feedback" /><category term="growth" /><category term="employee" /><category term="engagement" /><summary type="html"></summary></entry><entry><title type="html">A developer’s guide to the most common open-source licenses (MIT, Apache 2.0, BSD)</title><link href="https://ghinda.com/blog/opensource/2020/open-source-licenses-apache-mit-bsd.html" rel="alternate" type="text/html" title="A developer's guide to the most common open-source licenses (MIT, Apache 2.0, BSD)" /><published>2020-07-04T00:00:00+00:00</published><updated>2020-07-04T00:00:00+00:00</updated><id>https://ghinda.com/blog/opensource/2020/open-source-licenses-apache-mit-bsd</id><content type="html" xml:base="https://ghinda.com/blog/opensource/2020/open-source-licenses-apache-mit-bsd.html">&lt;p&gt;&lt;em&gt;Notice: Please be aware that I am not a lawyer, and what I write here is based on some other sources from the internet, among which very few are from lawyers.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Please note this is a long article covering the following topics:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;#summary&quot;&gt;Summary&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#comparisons-between-mit-apache-20-license-and-bsd-licenses&quot;&gt;Comparisons between MIT, Apache 2.0 License and BSD licenses&lt;/a&gt;:
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;#permissions-conditions-and-limitations&quot;&gt;Permissions, conditions and limitations&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#protection-for-the-authorcontributors&quot;&gt;Protection for the author/contributors&lt;/a&gt;
        &lt;ul&gt;
          &lt;li&gt;&lt;a href=&quot;#warranty&quot;&gt;Warranty&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href=&quot;#limitation-of-liability&quot;&gt;Limitation of Liability&lt;/a&gt;&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#mit-license&quot;&gt;MIT License&lt;/a&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;#mit-license-facts-and-figures&quot;&gt;MIT License facts and figures&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#mit-license-permissions-conditions-and-limitations&quot;&gt;MIT License: permissions, conditions and limitations&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#risks-for-choosing-mit-license&quot;&gt;Risks for choosing MIT License&lt;/a&gt;
        &lt;ul&gt;
          &lt;li&gt;&lt;a href=&quot;#what-is-left-out-or-unclear&quot;&gt;What is left out or unclear&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href=&quot;l#possible-risks-from-difference-versions&quot;&gt;Possible risks from difference versions&lt;/a&gt;&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#compatibilities-with-other-open-source-licenses&quot;&gt;Compatibilities with other open-source licenses&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#open-source-policies-recommending-it-as-default&quot;&gt;Open source policies recommending it as default&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#example-of-projects-using-mit-license&quot;&gt;Example of projects using MIT License&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#apache-license-20&quot;&gt;Apache 2.0 License&lt;/a&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;#apache-license-20-facts-and-figures&quot;&gt;Apache License 2.0 Facts and figures&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#apache-license-20-permissions-conditions-and-limitations&quot;&gt;Apache License 2.0: permissions, conditions and limitations&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#risks-for-choosing-apache-license-20&quot;&gt;Risks for choosing Apache 2.0&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#compatibilities-with-other-open-source-licenses-1&quot;&gt;Compatibilities with other open source licenses&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#recommendations-to-use-apache-20-license&quot;&gt;Recommendations to use Apache 2.0 License&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#example-of-projects-using-apache-20-license&quot;&gt;Example of projects using Apache 2.0 License&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#bsd-license&quot;&gt;BSD License&lt;/a&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;#bsd-license-facts-and-figures&quot;&gt;BSD License Facts and Figures&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#bsd-license-permissions-conditions-and-limitations&quot;&gt;BSD License: Permissions, conditions and limitations&lt;/a&gt;
        &lt;ul&gt;
          &lt;li&gt;&lt;a href=&quot;#bsd-2-clause-license&quot;&gt;BSD 2 Clause License&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href=&quot;#bsd-3-clause-license&quot;&gt;BSD 3-Clause License&lt;/a&gt;&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#risks-for-choosing-bsd-license&quot;&gt;Risks for choosing BSD License&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#bsd-license-compatibility-with-other-open-source-licenses&quot;&gt;BSD License compatibility with other open source licenses&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#examples-of-projects-using-bsd-license&quot;&gt;Examples of projects using BSD License&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#more-resources&quot;&gt;More resources&lt;/a&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;#combining-licenses&quot;&gt;Combining licenses&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h1 id=&quot;summary&quot;&gt;Summary&lt;/h1&gt;

&lt;p&gt;As I embarked into doing an open-source project, among the first things to decide is what kind of open-source license should it have. After reading a lot of materials, I will write here my recommendations and also some reviews of the most used licenses in open-source projects.&lt;/p&gt;

&lt;p&gt;I will start with what I would recommend:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;I would choose Apache License 2 for a finite project which can be installed directly and used. Think about something like a full web app, or a desktop application. This is because it can create trust in installing the application and using it without any concern about patents.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;I would choose the MIT License for plugins, gems, packages, libraries. Think about Nodejs packages or Ruby gems. I recommend this because MIT License is easier to understand (can be read in a minute), and thus more developers will use the creation, and it is used a lot in the community.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;A good alternative is the BSD License, either 2-Clause or 3-Clause, in case there are concerns about using your name/brand to promote derivative work or by users of the software.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A strong indication for choosing Apache License 2.0 is &lt;a href=&quot;https://medium.com/@raulk/list-of-companies-and-popular-projects-by-the-open-source-licenses-they-use-35a53eaf1c80&quot;&gt;the analysis of 75 open source projects across 35 companies&lt;/a&gt; where Apache License 2.0 is the most used one.&lt;/p&gt;

&lt;p&gt;All three licenses analyzed here seems are recommended by well-known groups/foundations in the open-source community (&lt;a href=&quot;https://www.fsf.org&quot;&gt;FSF&lt;/a&gt;, &lt;a href=&quot;https://opensource.com&quot;&gt;OSI&lt;/a&gt;, &lt;a href=&quot;https://www.debian.org&quot;&gt;Debian&lt;/a&gt;, &lt;a href=&quot;https://fedoraproject.org&quot;&gt;Fedora&lt;/a&gt;):&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Free Software Foundation - &lt;a href=&quot;https://www.gnu.org/licenses/license-list.html#GPLCompatibleLicenses&quot;&gt;list of GPL compatible licenses&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Open Source Initiative - &lt;a href=&quot;https://opensource.org/licenses/alphabetical&quot;&gt;list of OSI approved licenses&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Debian Foundation - &lt;a href=&quot;https://www.debian.org/legal/licenses/&quot;&gt;list of licenses&lt;/a&gt; which follow the &lt;a href=&quot;https://www.debian.org/social_contract#guidelines&quot;&gt;Debian Free Software Guidelines&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Fedora Foundation - &lt;a href=&quot;https://fedoraproject.org/wiki/Licensing:Main?rd=Licensing#SoftwareLicenses&quot;&gt;list of right licenses&lt;/a&gt; that are OK for Fedora&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Their main advantages&lt;/em&gt;:&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;All 3 of them allow derivative work, sub-licensing, commercial use, and distribution.&lt;/li&gt;
  &lt;li&gt;They can be combined with any other license - including copy-left licenses (of course, under the new license), so developers don’t need to restrict what to include in their open-source software.&lt;/li&gt;
  &lt;li&gt;They are supported by default by &lt;a href=&quot;https://github.com&quot;&gt;Github&lt;/a&gt; and &lt;a href=&quot;https://gitlab.com&quot;&gt;Gitlab&lt;/a&gt; when creating a new repository, and they are acknowledged as compatible with Free Software and Open Source Software by FOSS, OSI, Debian, and Fedora (see links provided above).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;em&gt;Their main disadvantage&lt;/em&gt;:&lt;/p&gt;

&lt;p&gt;There is a risk specifically for the developer that someone might take the code and use it in an unintended way (including making it part of a proprietary, non-open source software), and there is no legal ground to stop that.&lt;/p&gt;

&lt;hr /&gt;

&lt;h1 id=&quot;comparisons-between-mit-apache-20-license-and-bsd-licenses&quot;&gt;Comparisons between MIT, Apache 2.0 License and BSD licenses&lt;/h1&gt;

&lt;h2 id=&quot;permissions-conditions-and-limitations&quot;&gt;Permissions, conditions and limitations&lt;/h2&gt;

&lt;p&gt;&lt;img src=&quot;https://ghinda.com/blog/assets/images/articles/2020/06/23/permissions-and-conditions-comparison-open-source-licenses.png&quot; alt=&quot;Comparision of open-source licenses - extract&quot; class=&quot;full-width-img rounded shadow&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Image source: &lt;a href=&quot;https://snyk.io/blog/mit-apache-bsd-fairest-of-them-all&quot;&gt;snyk.io&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://ghinda.com/blog/assets/images/articles/2020/06/23/permissions-and-conditions-comparison-open-source-licenses-wikipedia-extract.png&quot; alt=&quot;Comparision of open-source licenses - extract from Wikipedia&quot; class=&quot;full-width-img rounded shadow&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Image source: &lt;a href=&quot;https://en.wikipedia.org/wiki/Comparison_of_free_and_open-source_software_licences&quot;&gt;wikipedia.org&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2 id=&quot;protection-for-the-authorcontributors&quot;&gt;Protection for the author/contributors&lt;/h2&gt;

&lt;p&gt;Two possible risks that might arise from putting something out as an open-source for the authors could be:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;To be required to offer a warranty for the end-users.&lt;/li&gt;
  &lt;li&gt;To be liable in case some loss happens to end-users while using the software.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3 id=&quot;warranty&quot;&gt;Warranty&lt;/h3&gt;

&lt;p&gt;Regarding warranty, all three licenses are pretty clear about what is not covered.&lt;/p&gt;

&lt;table class=&quot;full-width-content shadow&quot; style=&quot;font-size: 70%&quot;&gt;
    &lt;thead&gt;
        &lt;th&gt;MIT License - Warranty Disclaimer&lt;/th&gt;
        &lt;th&gt;Apache License 2.0 - Warranty Disclaimer&lt;/th&gt;
        &lt;th&gt;BSD 2-Clause or 3-Clause - Warranty Disclaimer&lt;/th&gt;
    &lt;/thead&gt;
    &lt;tr&gt;
        &lt;td&gt; 
            THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT. 
        &lt;/td&gt;
        &lt;td&gt;
            THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT. | Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
        &lt;/td&gt;
        &lt;td&gt;
            THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
        &lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;

&lt;h3 id=&quot;limitation-of-liability&quot;&gt;Limitation of Liability&lt;/h3&gt;

&lt;p&gt;The same is right about Limitation of Liability:&lt;/p&gt;

&lt;table class=&quot;full-width-content shadow&quot; style=&quot;font-size: 70%&quot;&gt;
    &lt;thead&gt;
        &lt;th&gt;MIT License&lt;/th&gt;
        &lt;th&gt;Apache License 2.0&lt;/th&gt;
        &lt;th&gt;BSD 2-Clause or 3-Clause&lt;/th&gt;
    &lt;/thead&gt;
    &lt;tr&gt;
        &lt;td&gt; 
            IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 
        &lt;/td&gt;
        &lt;td&gt;
            Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
        &lt;/td&gt;
        &lt;td&gt;
            IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
        &lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;

&lt;p&gt;Notice that MIT and BSD have writing in ALL CAPS, even if this might not make any difference (&lt;a href=&quot;https://writing.kemitchell.com/2016/09/21/MIT-License-Line-by-Line.html&quot;&gt;kemitchell.com&lt;/a&gt;):&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;Courts have criticized the Bar for pretending as much, and most everyone agrees all-caps does more to discourage reading than compel it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;hr /&gt;

&lt;h1 id=&quot;mit-license&quot;&gt;MIT License&lt;/h1&gt;

&lt;h2 id=&quot;mit-license-facts-and-figures&quot;&gt;MIT License facts and figures&lt;/h2&gt;

&lt;p&gt;Type of license: &lt;em&gt;PERMISSIVE&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The full content of MIT License can is here: &lt;a href=&quot;https://opensource.org/licenses/MIT&quot;&gt;https://opensource.org/licenses&lt;/a&gt; or here &lt;a href=&quot;https://spdx.org/licenses/MIT.html&quot;&gt;https://spdx.org/licenses/MIT.html&lt;/a&gt;. There is one minor difference between these two versions regarding the explicit requirements to include the liability paragraph.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://ghinda.com/blog/assets/images/articles/2020/06/23/MIT-license-comparision-between-spdx-osi.png&quot; alt=&quot;Difference between SPDX and OSI version of MIT License&quot; class=&quot;full-width-img rounded shadow&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Left: SPDX License, Right: Opensource/Debian MIT License&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Free Software Foundation, OSI, Debian, and Fedora include MIT License in their lists of free software or open-source software licenses.&lt;/p&gt;

&lt;p&gt;It is recommended by &lt;a href=&quot;https://choosealicense.com&quot;&gt;https://choosealicense.com&lt;/a&gt; (created by Github) with the explanation:&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;The &lt;a href=&quot;https://choosealicense.com/licenses/mit/&quot;&gt;MIT License&lt;/a&gt; is short and to the point. It lets people do almost anything they want with your project, like making and distributing closed source versions.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;According to &lt;a href=&quot;https://resources.whitesourcesoftware.com/blog-whitesource/top-open-source-licenses-trends-and-predictions&quot;&gt;this study&lt;/a&gt;, the MIT License is the most used license with 27% usage. 
A &lt;a href=&quot;https://github.com/search?q=license%3Amit&amp;amp;type=Repositories&amp;amp;ref=advsearch&amp;amp;l=&amp;amp;l=&quot;&gt;public search on Github&lt;/a&gt; for how many repositories are using MIT License found over 4 million results.&lt;/p&gt;

&lt;h2 id=&quot;mit-license-permissions-conditions-and-limitations&quot;&gt;MIT License: permissions, conditions and limitations&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;https://tldrlegal.com&quot;&gt;tldrlegal.com&lt;/a&gt; does an excellent summary of what the OSI license allows:&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;A short, permissive software license. Basically, you can do whatever you want as long as you include the original copyright and license notice in any copy of the software/source.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A &lt;a href=&quot;https://en.wikipedia.org/wiki/Comparison_of_free_and_open-source_software_licences&quot;&gt;Wikipedia page&lt;/a&gt; describes a comparison between various licenses and looks at 7 possible permissions. Here is what is says about MIT License:&lt;/p&gt;

&lt;table style=&quot;font-size: 80%&quot; class=&quot;full-width-content shadow&quot;&gt; 
    &lt;thead&gt;
        &lt;th&gt;Actions&lt;/th&gt;
        &lt;th&gt;Permission&lt;/th&gt;
    &lt;/thead&gt;
    &lt;tr&gt;
        &lt;td&gt;Linking of the licensed code with code licensed under a different licence (e.g. when the code is provided as a library)&lt;/td&gt;
        &lt;td&gt;YES&lt;/td&gt;
    &lt;/tr&gt;   
    &lt;tr&gt;
        &lt;td&gt;Distribution of the code to third parties&lt;/td&gt;
        &lt;td&gt;YES&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td&gt;Modification of the code by a licensee&lt;/td&gt;
        &lt;td&gt;YES&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td&gt;Protection of licensees from patent claims made by code contributors regarding their contribution, and protection of contributors from patent claims made by licensees&lt;/td&gt;
        &lt;td&gt;MANUALLY&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td&gt;May be used privately (e.g. internal use by a corporation)&lt;/td&gt;
        &lt;td&gt;YES&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td&gt;Whether modified code may be licensed under a different licence&lt;/td&gt;
        &lt;td&gt;YES&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td&gt;Use of trademarks associated with the licensed code or its contributors by a licensee&lt;/td&gt;
        &lt;td&gt;YES&lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;

&lt;p&gt;From an open-source handbook created by &lt;a href=&quot;https://www.finos.org&quot;&gt;FINOS&lt;/a&gt;, we have the following summary:&lt;/p&gt;

&lt;table style=&quot;font-size: 80%&quot; class=&quot;full-width-content shadow&quot;&gt; 
    &lt;thead&gt;
        &lt;th&gt;Binary or Source Code&lt;/th&gt;
        &lt;th&gt;Actions&lt;/th&gt;
        &lt;th&gt;Requirements&lt;/th&gt;
    &lt;/thead&gt;
    &lt;tr&gt;
        &lt;td rowspan=&quot;2&quot;&gt;Binary Form&lt;/td&gt;
        &lt;td&gt;Distribution, &lt;strong&gt;unmodified&lt;/strong&gt;&lt;/td&gt;
        &lt;td&gt;
            &lt;i&gt;Provide copy of license&lt;/i&gt;&lt;br /&gt;
            and &lt;br /&gt;
            &lt;i&gt;Provide copyright notice&lt;/i&gt;
        &lt;/td&gt;
    &lt;/tr&gt;   
    &lt;tr&gt;
        &lt;td&gt;Distribution, &lt;strong&gt;modified&lt;/strong&gt;&lt;/td&gt;
        &lt;td&gt;
            &lt;i&gt;Provide copy of license&lt;/i&gt;&lt;br /&gt;
            and &lt;br /&gt;
            &lt;i&gt;Provide copyright notice&lt;/i&gt;
        &lt;/td&gt;
    &lt;/tr&gt;  
    &lt;tr&gt;
        &lt;td rowspan=&quot;2&quot;&gt;Source Code&lt;/td&gt;
        &lt;td&gt;Distribution, &lt;strong&gt;unmodified&lt;/strong&gt;&lt;/td&gt;
        &lt;td&gt;
            &lt;i&gt;Provide copy of license&lt;/i&gt;&lt;br /&gt;
            and &lt;br /&gt;
            &lt;i&gt;Provide copyright notice&lt;/i&gt;
        &lt;/td&gt;
    &lt;/tr&gt;  
    &lt;tr&gt;
        &lt;td&gt;Distribution, &lt;strong&gt;modified&lt;/strong&gt;&lt;/td&gt;
        &lt;td&gt;
            &lt;i&gt;Provide copy of license&lt;/i&gt;&lt;br /&gt;
            and &lt;br /&gt;
            &lt;i&gt;Provide copyright notice&lt;/i&gt;
        &lt;/td&gt;
    &lt;/tr&gt;  
&lt;/table&gt;

&lt;p&gt;Also a good description of what this license allows or not can be read here &lt;a href=&quot;https://writing.kemitchell.com/2016/09/21/MIT-License-Line-by-Line.html&quot;&gt;writing.kemitchell.com&lt;/a&gt; and here &lt;a href=&quot;https://opensource.com/article/18/3/patent-grant-mit-license&quot;&gt;opensource.com&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Some highlights from these two documents:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Because the language is broad and open-ended, then there is no restriction on what the licensee can do with the Software. Kyle Mitchell says about this:
    &lt;blockquote&gt;
      &lt;p&gt;“It gives licensees a strong argument against any claim by a licensor that they didn’t give permission for the licensee to do that specific thing with the software, even if the thought clearly didn’t occur to either side when the license was given.”&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
  &lt;li&gt;It does not cover the patent license explicitly. Mitchell says that there might be legal concerns for licensee about “getting sued for copyright infringement and getting sued for patent infringement”. His exact statement says:
    &lt;blockquote&gt;
      &lt;p&gt;“The general language “deal in” and some of the example verbs, especially “use”, point toward a patent license, albeit a very unclear one. The fact that the license comes from the copyright holder, who may or may not have patent rights in inventions in the software, as well as most of the example verbs and the definition of “the Software” itself, all point strongly toward a copyright license.”&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
  &lt;li&gt;A member of Red Hat Legal team thinks that:
    &lt;blockquote&gt;
      &lt;p&gt;“There is nothing that would lead one to believe that the licensor wanted to preserve their right to pursue patent infringement claims against the use of software”&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
  &lt;li&gt;The MIT License has some conditions for using the Software:
    &lt;blockquote&gt;
      &lt;p&gt;If you give someone a copy of the software, you need to include the license text and any copyright notice.&lt;/p&gt;

      &lt;p&gt;…
You can’t pretend that the MIT code is your own proprietary code, or provided under some other license. Those receiving get to know their rights under the “public license”.&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;risks-for-choosing-mit-license&quot;&gt;Risks for choosing MIT License&lt;/h2&gt;

&lt;h3 id=&quot;what-is-left-out-or-unclear&quot;&gt;What is left out or unclear&lt;/h3&gt;

&lt;p&gt;Still there are a lot of concerns expresses (not exactly from lawyers) that:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;The MIT License does not cover explicitely the patents rights&lt;/li&gt;
  &lt;li&gt;The MIT License does not cover explicitly the trademarks restrictions&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Sources for rising these concerns: &lt;a href=&quot;https://github.com/SmartColumbusOS/TechnicalWorkingGroup/issues/12&quot;&gt;one&lt;/a&gt;, &lt;a href=&quot;https://www.quora.com/What-are-the-pros-and-cons-of-the-MIT-license&quot;&gt;two&lt;/a&gt;, &lt;a href=&quot;https://snyk.io/blog/mit-apache-bsd-fairest-of-them-all/&quot;&gt;three&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&quot;possible-risks-from-difference-versions&quot;&gt;Possible risks from difference versions&lt;/h3&gt;

&lt;p&gt;One important thing to consider when talking about “MIT License” is that there are many variants of this license, but it is not versioned. So it is tough to understand about what version of this license people are talking about.&lt;/p&gt;

&lt;p&gt;It seems like a lot of projects use the MIT License - Expat as it is presented by &lt;a href=&quot;https://www.debian.org/legal/licenses/mit&quot;&gt;Debian&lt;/a&gt; and is the same as the one recommended by &lt;a href=&quot;https://opensource.org/licenses/MIT&quot;&gt;Opensource.org&lt;/a&gt;. 
&lt;a href=&quot;https://www.gnu.org/licenses/license-list.html&quot;&gt;Gnu.org&lt;/a&gt; names this license “Expat License” and warns against naming it “MIT License” because MIT used many licenses for their software:&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;Some people call this license “the MIT License,” but that term is misleading since MIT has used many licenses for software. It is also ambiguous since the same people also call the &lt;a href=&quot;https://www.gnu.org/licenses/license-list.html#X11License&quot;&gt;X11 license&lt;/a&gt; “the MIT License,” failing to distinguish them. We recommend not using the term “MIT License.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;To see a long list of what people call MIT License can be found at this link: &lt;a href=&quot;https://fedoraproject.org/wiki/Licensing:MIT&quot;&gt;https://fedoraproject.org/wiki/Licensing:MIT&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Also, research from 2015 - “On the Variability of the BSD and MIT Licenses” by Trevor Maryka, Daniel M. German, and German Poo-Caamano - found 11 separate license versions. The study data are available here &lt;a href=&quot;http://turingmachine.org/2015/mit-bsd&quot;&gt;turingmachine.org/../mit-bsd&lt;/a&gt;, and for a summary of differences, you should look directly at this file &lt;a href=&quot;http://turingmachine.org/2015/mit-bsd/mitx11.txt&quot;&gt;turingmachine.org/../mitx11.txt&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;compatibilities-with-other-open-source-licenses&quot;&gt;Compatibilities with other open-source licenses&lt;/h2&gt;

&lt;p&gt;MIT is a permissive license allowing you to re-license the derivative work under any license (&lt;a href=&quot;https://law.stackexchange.com/questions/6081/can-i-bundle-mit-licensed-components-in-a-apache-2-0-licensed-project&quot;&gt;source&lt;/a&gt;). 
In general, when you combine the MIT License with any other open source license, the resulting derivative work will not be MIT License. When you combine Public Domain, or MIT Licensed components, the result derivative work can be MIT License.&lt;/p&gt;

&lt;p&gt;A more detailed graph of what licenses can be used with what licenses were created avid A. Wheeler: &lt;a href=&quot;https://dwheeler.com/essays/floss-license-slide.html&quot;&gt;dwheeler.com&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;open-source-policies-recommending-it-as-default&quot;&gt;Open source policies recommending it as default&lt;/h2&gt;

&lt;p&gt;There are some companies which are suggesting MIT License as default one for new open-source projects:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Buffer &lt;a href=&quot;https://open.buffer.com/guide-open-source&quot;&gt;is recommending&lt;/a&gt; the use of MIT License in their open-source guide.&lt;/li&gt;
  &lt;li&gt;Joyent &lt;a href=&quot;https://github.com/joyent/rfd/blob/master/rfd/0164/README.md&quot;&gt;is also recommending&lt;/a&gt; the use of the MIT License as the default choice.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;example-of-projects-using-mit-license&quot;&gt;Example of projects using MIT License&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/babel/babel/blob/master/LICENSE&quot;&gt;Babel&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/dotnet/runtime/blob/master/LICENSE.TXT&quot;&gt;Dotnet Runtime&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/rails/rails/blob/master/MIT-LICENSE&quot;&gt;Ruby on Rails&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/microsoft/vscode/blob/master/LICENSE.txt&quot;&gt;Visual Studio Code&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/vuejs/vue/blob/dev/LICENSE&quot;&gt;Vue.js&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/facebook/react/blob/master/LICENSE&quot;&gt;React&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h1 id=&quot;apache-license-20&quot;&gt;Apache License 2.0&lt;/h1&gt;

&lt;h2 id=&quot;apache-license-20-facts-and-figures&quot;&gt;Apache License 2.0 Facts and figures&lt;/h2&gt;

&lt;p&gt;Type of license:  &lt;em&gt;PERMISSIVE&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Apache License 2.0 can be found on the &lt;a href=&quot;https://www.apache.org/licenses/LICENSE-2.0.txt&quot;&gt;Apache Foundation website&lt;/a&gt; or at &lt;a href=&quot;https://opensource.org/licenses/Apache-2.0&quot;&gt;OSI website&lt;/a&gt; or at &lt;a href=&quot;https://spdx.org/licenses/Apache-2.0.html&quot;&gt;Software Package Data Exchange website&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;A search on Github on how many repositories are using this license found 1.284.000 projects under Apache License 2.0&lt;/p&gt;

&lt;p&gt;Free Software Foundation, OSI, Debian and Fedora are all including Apache License 2.0 in their lists of free software or open source software licenses.&lt;/p&gt;

&lt;h2 id=&quot;apache-license-20-permissions-conditions-and-limitations&quot;&gt;Apache License 2.0: permissions, conditions and limitations&lt;/h2&gt;

&lt;p&gt;Here is a brief summary as described by &lt;a href=&quot;https://choosealicense.com/licenses/apache-2.0&quot;&gt;Choose a License&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;A permissive license whose main conditions require preservation of copyright and license notices. Contributors provide an express grant of patent rights. Licensed works, modifications, and larger works may be distributed under different terms and without source code.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Another short summary of this license from &lt;a href=&quot;https://resources.whitesourcesoftware.com/blog-whitesource/top-10-apache-license-questions-answered&quot;&gt;White Source Software&lt;/a&gt; could be:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;You can freely use, modify, distribute and sell a software licensed under the Apache License without worrying about the use of software: personal, internal or commercial.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Summary of permissions, conditions and limitations:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://ghinda.com/blog/assets/images/articles/2020/06/23/apache-2-0-license-summary-of-permissions.png&quot; alt=&quot;Apache 2.0 License summary of permissions, conditions and limitation&quot; class=&quot;full-width-img shadow rounded&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Image source: &lt;a href=&quot;https://choosealicense.com/licenses/&quot;&gt;choosealicense.com&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;A &lt;a href=&quot;https://en.wikipedia.org/wiki/Comparison_of_free_and_open-source_software_licences&quot;&gt;Wikipedia page&lt;/a&gt; describes a comparison between various licenses and looks at 7 possible permissions. Here is what is says about Apache License 2.0:&lt;/p&gt;

&lt;table style=&quot;font-size: 80%&quot; class=&quot;full-width-content shadow&quot;&gt; 
    &lt;thead&gt;
        &lt;th&gt;Actions&lt;/th&gt;
        &lt;th&gt;Permission&lt;/th&gt;
    &lt;/thead&gt;
    &lt;tr&gt;
        &lt;td&gt;Linking of the licensed code with code licensed under a different licence (e.g. when the code is provided as a library)&lt;/td&gt;
        &lt;td&gt;YES&lt;/td&gt;
    &lt;/tr&gt;   
    &lt;tr&gt;
        &lt;td&gt;Distribution of the code to third parties&lt;/td&gt;
        &lt;td&gt;YES&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td&gt;Modification of the code by a licensee&lt;/td&gt;
        &lt;td&gt;YES&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td&gt;Protection of licensees from patent claims made by code contributors regarding their contribution, and protection of contributors from patent claims made by licensees&lt;/td&gt;
        &lt;td&gt;YES&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td&gt;May be used privately (e.g. internal use by a corporation)&lt;/td&gt;
        &lt;td&gt;YES&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td&gt;Whether modified code may be licensed under a different licence&lt;/td&gt;
        &lt;td&gt;YES&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td&gt;Use of trademarks associated with the licensed code or its contributors by a licensee&lt;/td&gt;
        &lt;td&gt;NO&lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;

&lt;p&gt;From an open source handbook created by &lt;a href=&quot;https://www.finos.org&quot;&gt;FINOS&lt;/a&gt; we have the following summary&lt;/p&gt;

&lt;table style=&quot;font-size: 80%&quot; class=&quot;full-width-content shadow&quot;&gt; 
    &lt;thead&gt;
        &lt;th&gt;Binary or Source Code&lt;/th&gt;
        &lt;th&gt;Actions&lt;/th&gt;
        &lt;th&gt;Requirements&lt;/th&gt;
    &lt;/thead&gt;
    &lt;tr&gt;
        &lt;td rowspan=&quot;2&quot;&gt;Binary Form&lt;/td&gt;
        &lt;td&gt;Distribution, &lt;strong&gt;unmodified&lt;/strong&gt;&lt;/td&gt;
        &lt;td&gt;
            &lt;i&gt;Provide copy of license&lt;/i&gt;
        &lt;/td&gt;
    &lt;/tr&gt;   
    &lt;tr&gt;
        &lt;td&gt;Distribution, &lt;strong&gt;modified&lt;/strong&gt;&lt;/td&gt;
        &lt;td&gt;
            &lt;i&gt;Provide copy of license &lt;/i&gt;&lt;br /&gt;
            and &lt;br /&gt;
            &lt;i&gt;Modified files must include “prominent notices” of the modifications&lt;/i&gt;
        &lt;/td&gt;
    &lt;/tr&gt;  
    &lt;tr&gt;
        &lt;td rowspan=&quot;2&quot;&gt;Source Code&lt;/td&gt;
        &lt;td&gt;Distribution, &lt;strong&gt;unmodified&lt;/strong&gt;&lt;/td&gt;
        &lt;td&gt;
            &lt;i&gt;Provide copy of license&lt;/i&gt;&lt;br /&gt;
            and &lt;br /&gt;
            &lt;i&gt;Retain all notices&lt;/i&gt;
        &lt;/td&gt;
    &lt;/tr&gt;  
    &lt;tr&gt;
        &lt;td&gt;Distribution, &lt;strong&gt;modified&lt;/strong&gt;&lt;/td&gt;
        &lt;td&gt;
            &lt;i&gt;Provide copy of license&lt;/i&gt;&lt;br /&gt;
            and &lt;br /&gt;
            &lt;i&gt;Modified files must include “prominent notices” of the modifications and Retain all notices&lt;/i&gt;
        &lt;/td&gt;
    &lt;/tr&gt;  
&lt;/table&gt;

&lt;p&gt;Other important things to take into consideration about this License:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;“If anyone intentionally sends a contribution for an Apache-licensed software to its authors, this contribution can automatically be used under the Apache License” - &lt;a href=&quot;https://www.toptal.com/open-source/developers-guide-to-open-source-licenses&quot;&gt;toptal.com&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;It explicitly asks for unmodified parts of the software to retain Apache License - &lt;a href=&quot;https://resources.whitesourcesoftware.com/blog-whitesource/top-10-apache-license-questions-answered&quot;&gt;whitesourcesoftware.com&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;“It requires you to explicitly list out all the modifications that you’ve done in the original software” - &lt;a href=&quot;https://resources.whitesourcesoftware.com/blog-whitesource/top-10-apache-license-questions-answered&quot;&gt;whitesourcesoftware.com&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;The patent grant should have a positive effect on Users who should not be afraid that any Contributor might pursue royalties from their contribution to the project - &lt;a href=&quot;https://opensource.com/article/18/2/how-make-sense-apache-2-patent-license&quot;&gt;opensource.com&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Finally, the patent licenses granted will be terminated immediately in case the Licensee decides to file a litigation against the Licensor.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Kem Mitchell includes indirectly in an &lt;a href=&quot;https://writing.kemitchell.com/2019/10/03/Open-Standards.html&quot;&gt;article&lt;/a&gt; the Apache License 2.0 as a better license than MIT License of BSD:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;The open licensing state-of-the-art has evolved, and releases under old licenses picked specifically for lack of clear patent permission won’t be greeted as good faith open source, but as legal traps, especially for organizations without access to savvy counsel.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Paul H. Arne from Morris, Manning &amp;amp; Martin, L.L.P published a whitepaper about &lt;a href=&quot;https://www.mmmlaw.com/files/documents/publications/article_238.pdf&quot;&gt;“Open Source Software Licenses: Perspectives of the End User  and the Software Developer“&lt;/a&gt; where they state:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;The Apache license is well-constructed, relatively easy to read, and provides a different approach to open source licensing from other open-source software licenses&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2 id=&quot;risks-for-choosing-apache-license-20&quot;&gt;Risks for choosing Apache License 2.0&lt;/h2&gt;

&lt;p&gt;One thing consider is that you cannot combine Apache License 2.0 with GPL v2 (&lt;a href=&quot;http://oss-watch.ac.uk/resources/apache2&quot;&gt;oss-watch.ac.uk&lt;/a&gt; and &lt;a href=&quot;https://www.gnu.org/licenses/license-list.html&quot;&gt;gnu.org&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;Another aspect to consider is that a “contributor can modify the code and then sell it as proprietary software” - &lt;a href=&quot;https://www.mmmlaw.com/files/documents/publications/article_238.pdf&quot;&gt;mmmlaw.com&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;compatibilities-with-other-open-source-licenses-1&quot;&gt;Compatibilities with other open source licenses&lt;/h2&gt;

&lt;p&gt;As described here, Apache License 2.0 cannot be combined with GPL/LGPL v1 and v2. This means that code released under Apache License 2.0 cannot be used in GPL v1 and v2 software. So if this kind of compatibility is needed, then Apache License 2.0 should not be chosen.&lt;/p&gt;

&lt;p&gt;If MIT Licensed code is combined with Apache License 2.0 code, then the derivative code might be Apache License 2.0.&lt;/p&gt;

&lt;h2 id=&quot;recommendations-to-use-apache-20-license&quot;&gt;Recommendations to use Apache 2.0 License&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;https://www.gnu.org/licenses/license-list.html&quot;&gt;GNU&lt;/a&gt; recommends to use Apache License 2.0 over MIT/Expat license.&lt;/p&gt;

&lt;p&gt;Google recommends to use Apache License 2.0 &lt;a href=&quot;https://opensource.google/docs/releasing/&quot;&gt;opensource.google&lt;/a&gt;&lt;/p&gt;

&lt;h2 id=&quot;example-of-projects-using-apache-20-license&quot;&gt;Example of projects using Apache 2.0 License&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/kubernetes/kubernetes/blob/master/LICENSE&quot;&gt;kubernetes&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/tensorflow/tensorflow/blob/master/LICENSE&quot;&gt;tensorflow&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/aosp-mirror/platform_system_core/blob/master/NOTICE&quot;&gt;android core&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/apple/swift/blob/master/LICENSE.txt&quot;&gt;Swift programming language&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h1 id=&quot;bsd-license&quot;&gt;BSD License&lt;/h1&gt;

&lt;h2 id=&quot;bsd-license-facts-and-figures&quot;&gt;BSD License Facts and Figures&lt;/h2&gt;

&lt;p&gt;Type of license:  &lt;em&gt;PERMISSIVE&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Initially there was a &lt;a href=&quot;https://spdx.org/licenses/BSD-4-Clause.html&quot;&gt;4 clause license&lt;/a&gt;,  which usually now can be identified by the name &lt;code class=&quot;highlighter-rouge&quot;&gt;BSD 4-Clause &quot;Original&quot; or &quot;Old&quot; License&lt;/code&gt;. This version was incompatible with GNU GPL and it included a clause to acknowledge the authors of any components under this license in any advertising material.&lt;/p&gt;

&lt;p&gt;This clause - the advertising clause - was removed and thus BSD 3-Clause license was created. Then also the non-endorsement clause was removed so BSD 2-Clause license was born.&lt;/p&gt;

&lt;p&gt;Among them, BSD 2-Clause is the most permissive license.&lt;/p&gt;

&lt;p&gt;The commonly used BSD licenses are:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;BSD 2 Clause: full content of license can be found here (&lt;a href=&quot;https://opensource.org/licenses/BSD-2-Clause&quot;&gt;opensource.org&lt;/a&gt;) or here (&lt;a href=&quot;https://spdx.org/licenses/BSD-2-Clause.html&quot;&gt;spdx.org&lt;/a&gt;). Github and Gitlab are using the SPDX version.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Differences between the OSI version and SPDX versions for BSD 2 Clause are the following:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://ghinda.com/blog/assets/images/articles/2020/06/23/bsd-2-clause-license-difference-osi-spdx.png&quot; alt=&quot;Diff between OSI version and SPDX versions for BSD 2 Clause&quot; class=&quot;full-width-img shadow rounded&quot; /&gt;&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;BSD 3 Clause: full content of license can be found here (&lt;a href=&quot;https://opensource.org/licenses/BSD-3-Clause&quot;&gt;opensource.org&lt;/a&gt;) or here (&lt;a href=&quot;https://spdx.org/licenses/BSD-3-Clause.html&quot;&gt;spdx.org&lt;/a&gt;). Github and Gitlab are using the SPDX version.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Differences between OSI version and SPDX version for BSD 3-Clause are:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://ghinda.com/blog/assets/images/articles/2020/06/23/bsd-3-clause-license-difference-osi-spdx.png&quot; alt=&quot;Diff between OSI version and SPDX versions for BSD 3 Clause&quot; class=&quot;full-width-img shadow rounded&quot; /&gt;&lt;/p&gt;

&lt;p&gt;On Github there are almost &lt;a href=&quot;https://github.com/search?q=license%3Absd-2-clause&amp;amp;type=Repositories&amp;amp;ref=advsearch&amp;amp;l=&amp;amp;l=&quot;&gt;80.000 projects&lt;/a&gt; (data from July 2020) using BSD 2 clause and almost &lt;a href=&quot;https://github.com/search?q=license%3Absd-3-clause&amp;amp;type=Repositories&amp;amp;ref=advsearch&amp;amp;l=&amp;amp;l=&quot;&gt;180.000 projects&lt;/a&gt; (data from July 2020) using BSD 3 clause.&lt;/p&gt;

&lt;p&gt;When creating a new project &lt;a href=&quot;https://github.com&quot;&gt;Github.com&lt;/a&gt; offers the option to choose between two types of BSD License (both of them are the SPDX versions and the naming convention is the same):&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;BSD 2-Clause “Simplified” License - which is the same as the &lt;a href=&quot;https://spdx.org/licenses/BSD-2-Clause.html&quot;&gt;SPDX BSD 2-Clause license&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;BSD 3-Clause “New” or “Revised” License - which is the same as the &lt;a href=&quot;https://spdx.org/licenses/BSD-3-Clause.html&quot;&gt;SPDX BSD 3-Clause License&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;img src=&quot;https://ghinda.com/blog/assets/images/articles/2020/06/23/github-opensource-project-choose-license.png&quot; alt=&quot;Choosing a license for a project on Github.com&quot; class=&quot;full-width-img shadow rounded&quot; /&gt;&lt;/p&gt;

&lt;p&gt;The same goes for &lt;a href=&quot;https://gitlab.org&quot;&gt;Gitlab.org&lt;/a&gt;, which offers the same 2 types of BSD Licenses that match the SPDX versions:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://ghinda.com/blog/assets/images/articles/2020/06/23/gitlab-opensource-project-choose-license.png&quot; alt=&quot;Choosing a license for a project on Gitlab.org&quot; class=&quot;full-width-img shadow rounded&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;bsd-license-permissions-conditions-and-limitations&quot;&gt;BSD License: Permissions, conditions and limitations&lt;/h2&gt;

&lt;h3 id=&quot;bsd-2-clause-license&quot;&gt;BSD 2 Clause License&lt;/h3&gt;

&lt;p&gt;From &lt;a href=&quot;https://tldrlegal.com/license/bsd-2-clause-license-(freebsd)&quot;&gt;tldrlegal.com&lt;/a&gt; :&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;The BSD 2-clause license allows you almost unlimited freedom with the software so long as you include the BSD copyright notice in it (found in Fulltext). Many other licenses are influenced by this one.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;From the open source handbook created by &lt;a href=&quot;https://www.finos.org&quot;&gt;FINOS&lt;/a&gt; we have the following summary:&lt;/p&gt;

&lt;table style=&quot;font-size: 80%&quot; class=&quot;full-width-content shadow&quot;&gt; 
    &lt;thead&gt;
        &lt;th&gt;Binary or Source Code&lt;/th&gt;
        &lt;th&gt;Actions&lt;/th&gt;
        &lt;th&gt;Requirements&lt;/th&gt;
    &lt;/thead&gt;
    &lt;tr&gt;
        &lt;td rowspan=&quot;2&quot;&gt;Binary Form&lt;/td&gt;
        &lt;td&gt;Distribution, &lt;strong&gt;unmodified&lt;/strong&gt;&lt;/td&gt;
        &lt;td&gt;
            &lt;i&gt;Provide copy of license&lt;/i&gt;
            &lt;br /&gt; and &lt;br /&gt;
            &lt;i&gt; Provide copyright notice &lt;/i&gt;
        &lt;/td&gt;
    &lt;/tr&gt;   
    &lt;tr&gt;
        &lt;td&gt;Distribution, &lt;strong&gt;modified&lt;/strong&gt;&lt;/td&gt;
        &lt;td&gt;
            &lt;i&gt;Provide copy of license&lt;/i&gt;
            &lt;br /&gt; and &lt;br /&gt;
            &lt;i&gt; Provide copyright notice &lt;/i&gt;
        &lt;/td&gt;
    &lt;/tr&gt;  
    &lt;tr&gt;
        &lt;td rowspan=&quot;2&quot;&gt;Source Code&lt;/td&gt;
        &lt;td&gt;Distribution, &lt;strong&gt;unmodified&lt;/strong&gt;&lt;/td&gt;
        &lt;td&gt;
            &lt;i&gt;Provide copy of license&lt;/i&gt;
            &lt;br /&gt; and &lt;br /&gt;
            &lt;i&gt; Provide copyright notice &lt;/i&gt;
        &lt;/td&gt;
    &lt;/tr&gt;  
    &lt;tr&gt;
        &lt;td&gt;Distribution, &lt;strong&gt;modified&lt;/strong&gt;&lt;/td&gt;
        &lt;td&gt;
            &lt;i&gt;Provide copy of license&lt;/i&gt;
            &lt;br /&gt; and &lt;br /&gt;
            &lt;i&gt; Provide copyright notice &lt;/i&gt;
        &lt;/td&gt;
    &lt;/tr&gt;  
&lt;/table&gt;

&lt;h3 id=&quot;bsd-3-clause-license&quot;&gt;BSD 3-Clause License&lt;/h3&gt;

&lt;p&gt;From [tldrlegal.com](https://tldrlegal.com/license/bsd-3-clause-license-(revised):&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;The BSD 3-clause license allows you almost unlimited freedom with the software so long as you include the BSD copyright and license notice in it (found in Fulltext).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This &lt;a href=&quot;https://en.wikipedia.org/wiki/Comparison_of_free_and_open-source_software_licences&quot;&gt;Wikipedia page&lt;/a&gt; describes a comparison between various licenses and looks at 7 possible permissions. Here is what is says about BSD 3-Clause License:&lt;/p&gt;

&lt;table style=&quot;font-size: 80%&quot; class=&quot;full-width-content shadow&quot;&gt; 
    &lt;thead&gt;
        &lt;th&gt;Actions&lt;/th&gt;
        &lt;th&gt;Permission&lt;/th&gt;
    &lt;/thead&gt;
    &lt;tr&gt;
        &lt;td&gt;Linking of the licensed code with code licensed under a different licence (e.g. when the code is provided as a library)&lt;/td&gt;
        &lt;td&gt;YES&lt;/td&gt;
    &lt;/tr&gt;   
    &lt;tr&gt;
        &lt;td&gt;Distribution of the code to third parties&lt;/td&gt;
        &lt;td&gt;YES&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td&gt;Modification of the code by a licensee&lt;/td&gt;
        &lt;td&gt;YES&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td&gt;Protection of licensees from patent claims made by code contributors regarding their contribution, and protection of contributors from patent claims made by licensees&lt;/td&gt;
        &lt;td&gt;MANUALLY&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td&gt;May be used privately (e.g. internal use by a corporation)&lt;/td&gt;
        &lt;td&gt;YES&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td&gt;Whether modified code may be licensed under a different licence&lt;/td&gt;
        &lt;td&gt;YES&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td&gt;Use of trademarks associated with the licensed code or its contributors by a licensee&lt;/td&gt;
        &lt;td&gt;
            MANUALLY
            &lt;br /&gt;
            &lt;blockquote style=&quot;font-size: 100%&quot;&gt;
             &quot;You may not use the names of the original company or its members to endorse derived products&quot;   
            &lt;/blockquote&gt; &lt;a href=&quot;https://tldrlegal.com/license/bsd-3-clause-license-(revised)&quot;&gt;source tldrlegal.com&lt;/a&gt;

        &lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;

&lt;h2 id=&quot;risks-for-choosing-bsd-license&quot;&gt;Risks for choosing BSD License&lt;/h2&gt;

&lt;p&gt;BSD License (2-Clause and 3-Clause) does not grant any patent rights - &lt;a href=&quot;https://resources.whitesourcesoftware.com/blog-whitesource/top-10-bsd-licenses-questions-answered&quot;&gt;whitesourcesoftware.com&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Among software creators, there might be concerns regarding how competition might be inspired by their open source and use the knowledge to gain dominance.&lt;/p&gt;

&lt;p&gt;Here is a possible answer to this from a resource on the &lt;a href=&quot;https://www.freebsd.org/doc/en_US.ISO8859-1/articles/bsdl-gpl/article.html&quot;&gt;FreeBSD.org&lt;/a&gt; website:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Under a BSD license, if one company came to dominate a product niche that others considered strategic, the other companies can, with minimal effort, form a mini-consortium aimed at re-establishing parity by contributing to a competitive BSD variant that increases market competition and fairness. This permits each company to believe that it will be able to profit from some advantage it can provide, while also contributing to economic flexibility and efficiency. The more rapidly and easily the cooperating members can do this, the more successful they will be. A BSD license is essentially a minimally complicated license that enables such behavior.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;BSD 2-Clause is almost similar to MIT License - &lt;a href=&quot;https://opensource.stackexchange.com/questions/217/what-are-the-essential-differences-between-the-bsd-and-mit-licences&quot;&gt;according to this answer on Stackexchange&lt;/a&gt; - so for users of the created software under BSD 2 Clause, there might be concerns regarding possible patent risks.&lt;/p&gt;

&lt;h2 id=&quot;bsd-license-compatibility-with-other-open-source-licenses&quot;&gt;BSD License compatibility with other open source licenses&lt;/h2&gt;

&lt;p&gt;BSD License is compatible with proprietary or open-source licenses. The only restriction is that 4-Clause BSD is not compatible with GNU GPL. 
The &lt;a href=&quot;https://dwheeler.com/essays/floss-license-slide.html&quot;&gt;David A. Wheeler graph&lt;/a&gt; can be used to see what license goes with what license.&lt;/p&gt;

&lt;h2 id=&quot;examples-of-projects-using-bsd-license&quot;&gt;Examples of projects using BSD License&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/golang/go/blob/master/LICENSE&quot;&gt;GO Programming Language&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/django/django/blob/master/LICENSE&quot;&gt;Django Python Framework&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/numpy/numpy/blob/master/LICENSE.txt&quot;&gt;NumPy&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/nginx/nginx/blob/master/docs/text/LICENSE&quot;&gt;Nginx&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h1 id=&quot;more-resources&quot;&gt;More resources&lt;/h1&gt;

&lt;p&gt;First, you should check &lt;a href=&quot;https://opensource.org/licenses/category&quot;&gt;the list of open-source licenses&lt;/a&gt; as it is defined by OSI.&lt;/p&gt;

&lt;p&gt;Then here is a list of &lt;a href=&quot;https://www.gnu.org/licenses/license-list.html&quot;&gt;open-source licenses with various comments&lt;/a&gt; from the GNU perspective for each one of them:.&lt;/p&gt;

&lt;p&gt;Another good place to read about what kind of permissions or restrictions open-source licenses have is &lt;a href=&quot;https://www.finos.org/blog/announcing-the-open-source-license-compliance-handbook&quot;&gt;this handbook&lt;/a&gt; created by FINOS.&lt;/p&gt;

&lt;p&gt;Then you can also check &lt;a href=&quot;https://choosealicense.com&quot;&gt;choosealicense website&lt;/a&gt; friendly website created by Github.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://resources.whitesourcesoftware.com/blog-whitesource/top-open-source-licenses-trends-and-predictions&quot;&gt;A good study&lt;/a&gt; about open source licenses. I found interesting the shift from copyleft to permissive license published by &lt;a href=&quot;https://resources.whitesourcesoftware.com/blog-whitesource/top-open-source-licenses-trends-and-predictions&quot;&gt;WhiteSource&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Other articles talking about open source licenses:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.toptal.com/open-source/developers-guide-to-open-source-licenses&quot;&gt;Developer’s Guide to Open Source Licenses&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://polyformproject.org/licenses&quot;&gt;A list of other possible open source licenses&lt;/a&gt; with different permissions&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://opensource.guide/legal&quot;&gt;The Legal Side of Open Source section&lt;/a&gt; at &lt;a href=&quot;https://opensource.guide&quot;&gt;Open Source Guides&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;combining-licenses&quot;&gt;Combining licenses&lt;/h2&gt;

&lt;p&gt;Important resources to read about combining licenses:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;David Wheeler &lt;a href=&quot;https://dwheeler.com/essays/floss-license-slide.html&quot;&gt;“license slide” figure&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Janelia FlyEM Project page about &lt;a href=&quot;https://janelia-flyem.github.io/licenses.html&quot;&gt;Open Source Licenses and their Compatibility&lt;/a&gt; based on David Wheeler license slide article.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In case a project has multiple licenses, then the resulting derivative work should comply with requirements from all licenses, and most probably will need to include all licenses in its license file. 
&lt;a href=&quot;https://opensource.stackexchange.com/questions/7384/proper-way-of-migrating-mit-licensed-code-to-apache-2-0-license&quot;&gt;This discussion&lt;/a&gt; on Open Source StackExchange is very clear about what needs to be done.&lt;/p&gt;

&lt;h1 id=&quot;final-words&quot;&gt;Final words&lt;/h1&gt;

&lt;p&gt;It might be that I got some things wrong or something is missing so if you have feedback please send it to ideas@ghinda.com.&lt;/p&gt;

&lt;p&gt;In case you just want to comment on this, here is the &lt;a href=&quot;https://news.ycombinator.com/item?id=23737838&quot;&gt;Hacker News discussion&lt;/a&gt;.&lt;/p&gt;</content><author><name>{&quot;twitter&quot;=&gt;&quot;lucianghinda&quot;}</name></author><category term="licenses" /><category term="reviews" /><category term="decisions" /><category term="howtodecide" /><summary type="html">Notice: Please be aware that I am not a lawyer, and what I write here is based on some other sources from the internet, among which very few are from lawyers.</summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://ghinda.com/blog/assets/images/cards/open-source-licenses-guide.png" /><media:content medium="image" url="https://ghinda.com/blog/assets/images/cards/open-source-licenses-guide.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Why I am starting an open-source project</title><link href="https://ghinda.com/blog/opensource/2020/start-open-source-project.html" rel="alternate" type="text/html" title="Why I am starting an open-source project" /><published>2020-06-30T00:00:00+00:00</published><updated>2020-06-30T00:00:00+00:00</updated><id>https://ghinda.com/blog/opensource/2020/start-open-source-project</id><content type="html" xml:base="https://ghinda.com/blog/opensource/2020/start-open-source-project.html">&lt;p&gt;I contributed bits and pieces to various open-source software, but nothing in the long run, I might say. I also was never a maintainer.&lt;/p&gt;

&lt;p&gt;I use a lot of open-source in my daily life, from programming languages to code editors. I am daily using daily &lt;a href=&quot;https://rubygems.org/&quot;&gt;Ruby gems&lt;/a&gt;, &lt;a href=&quot;https://www.npmjs.com/&quot;&gt;Nodejs packages&lt;/a&gt;, web frameworks (I am using &lt;a href=&quot;https://rubyonrails.org&quot;&gt;Ruby on Rails&lt;/a&gt; mostly), CSS frameworks (I am using &lt;a href=&quot;https://bulma.io/&quot;&gt;Bulma&lt;/a&gt;, &lt;a href=&quot;https://tailwindcss.com/&quot;&gt;TailwindCSS&lt;/a&gt;, &lt;a href=&quot;https://getbootstrap.com/&quot;&gt;Boostrap&lt;/a&gt;), Javascript frameworks (mostly &lt;a href=&quot;https://stimulusjs.org/&quot;&gt;Stimulus.js&lt;/a&gt;, recently started &lt;a href=&quot;https://vuejs.org/&quot;&gt;Vue.js&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;It is hard for me to imagine the products I created or creating now without these open-source software. 
When I think about the creators or maintainers of various open-source packages, I am amazed to see their dedication, helpful responses, and the way they care for the community of users and contributors. For me, they are indeed the heroes of the modern web.&lt;/p&gt;

&lt;p&gt;In a way, these open-source creators remind me of the late 90s when I had my first email address and started using Unix for the first time. I learned a lot from various mailing lists and IRC channels about computers, about how to install and reinstall my OSes, about how to create my first program, about changing config files for some games to make them work. It was a time when we helped each other when Google and StackOverflow did not exist. It was real communication supported by a genuine passion for assisting others in discovering the wonders of this new thing we called WWW.&lt;/p&gt;

&lt;p&gt;I will start working for a couple of months to a new project: open-sourcing the IT Connect app that I developed while I was Innovation Product Owner / Innovation Master at METRO SYSTEMS Romania. The application is a web platform for innovation and idea management.&lt;/p&gt;

&lt;p&gt;The open-source application will be developed with &lt;a href=&quot;https://www.linkedin.com/in/elena-bogus-131b671&quot;&gt;Elena Bogus&lt;/a&gt; as Product Owner, and I will be the developer and maintainer. It will actually be a rewritten from scratch because now we have a better and brighter vision about how such a platform should be.
I will outline why I want to do an open-source project and hope that maybe I will inspire others to do the same.&lt;/p&gt;

&lt;p&gt;Before going into that, let me give praise to &lt;a href=&quot;https://www.metrosystems.ro&quot;&gt;METRO SYSTEMS Romania&lt;/a&gt;. I think accepting to open-source this application is an inspiring decision taken by them, and it is along an innovation road they took 6 years ago. It is a significant contribution to put there in the world for anyone who wants to use the knowledge that we created there while experimenting with innovation and entrepreneurship. Just in case you want to have a small taste of some learnings from this journey, Elena wrote an excellent article about &lt;a href=&quot;https://medium.com/metrosystemsro/7-learnings-from-building-a-corporate-innovation-culture-c075dc777117&quot;&gt;7 learnings out of building a corporate innovation culture&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Embarking in a journey to build an open-source project for me is mostly about:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;A sense of contribution and giving back to the community&lt;/li&gt;
  &lt;li&gt;Deepening my knowledge and learning something new&lt;/li&gt;
  &lt;li&gt;Connecting to new people&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But let’s start with WHY.&lt;/p&gt;

&lt;hr /&gt;

&lt;h1 id=&quot;why-this-product&quot;&gt;Why this product?&lt;/h1&gt;

&lt;p&gt;I am a person with a lot of ideas, I am always working on multiple projects simultaneously, so I understand the domain. In a way, I am scratching my own itch.&lt;/p&gt;

&lt;p&gt;It also matches my experience in the last 5 years while being an Innovation Product Owner at METRO SYSTEMS. It is an excellent opportunity to find a way to code some of the learnings I had while supporting hundreds of people to transform their ideas into real products and launch them.
I think an innovation management platform will help companies or teams to make their ideas happen faster with higher results. I often see people saying out loud ideas of products or services that they would like to create but remain just ideas—most of the time, there no step further than saying a phrase about them. Having a place where one can submit their ideas, where one can gather support or team members, where there are mentors and sponsorship, where feedback is given is creating more opportunities for anyone to advance their solutions.&lt;/p&gt;

&lt;p&gt;I also firmly believe that innovation is driven by innovation. The more you do, the more you will do it. It is thus essential to have a place where you can see what is happening around in your organization. People will get inspired while reading other people’s ideas. Being transparent about what is happening is a big motivator for more people to contribute. And more people participating means more views and in the end, better ideas.&lt;/p&gt;

&lt;p&gt;I think this process - of making an idea happen - has greater chances to sparkle real innovation if it is digital-first if an organization uses a web app to empower their innovation and to make it more appealing to anyone in the company. If there is no digital place to submit ideas, they are often shut down by immediate peers or direct managers. This killing of ideas is removing the most innovative ones in the first place. But publishing to a digital space allows a broader audience and thus more changes that an idea will live long enough to at least be validated.&lt;/p&gt;

&lt;hr /&gt;

&lt;h1 id=&quot;why-now&quot;&gt;Why now?&lt;/h1&gt;

&lt;p&gt;This year - 2020 - started not so good. We have an international crisis (the SARS-CoV-2 pandemic), which affects in ways no one can predict our lives. I am sure that it will affect business and personal areas, accelerating some trends, destroying others, and making space for new things to appear.&lt;/p&gt;

&lt;p&gt;I am convinced this kind of transformation will be, in general, a painful process. So there will be a great need for solutions to this wide range of problems.&lt;/p&gt;

&lt;p&gt;You might ask yourself if it is not too late to start doing this. I think the effects of this year’s pandemic will ripple through 2020 and possibly into 2021.&lt;/p&gt;

&lt;p&gt;This is why open-sourcing a platform that helps people speed up finding innovative solutions is probably among the best things I can do to help as many people as possible.&lt;/p&gt;

&lt;hr /&gt;

&lt;h1 id=&quot;why-open-source&quot;&gt;Why open-source?&lt;/h1&gt;

&lt;p&gt;What is excellent about open-source is that it can be used by anyone, without any concern about privacy or any hidden interest from the creator. Anyone who will want will be able to take the platform, install it, and start helping their colleagues to make their ideas happen.&lt;/p&gt;

&lt;p&gt;I genuinely hope the platform will be used by businesses and NGOs alike, as it will be a simple web-based app. I plan to use it myself for my own ideas.&lt;/p&gt;

&lt;p&gt;I want to contribute back to the broad Internet community and get in the role of the creator of open-source software. I think it is a moral obligation to give back to the open-source community as much as possible. I am inspired by as many heroes I follow today on Twitter or Github or HackerNews, and I want to help others as they helped me being who I am from a technical perspective.&lt;/p&gt;

&lt;p&gt;To make this project available to as many people as possible, the only logical decision is to make it open-source. This will also improve the innovative ability as it will allow more people to contribute with their own ideas on how to make the platform more helpful.&lt;/p&gt;

&lt;hr /&gt;

&lt;h1 id=&quot;more-personal-reasons&quot;&gt;More personal reasons&lt;/h1&gt;

&lt;h3 id=&quot;better-programming-skills&quot;&gt;Better programming skills&lt;/h3&gt;

&lt;p&gt;For me, this is a great occasion to shape my programming skills. There is no better incentive to expand my programming skills than to have my code open so that anyone can give feedback. I want to become a better programmer, I want my code to be elegant and simple to transmit better my ideas.&lt;/p&gt;

&lt;h3 id=&quot;get-better-at-communication&quot;&gt;Get better at communication&lt;/h3&gt;

&lt;p&gt;Creating an open-source community means doing a lot of communication. I re-started this blog to improve my communication. Open-sourcing a product implies more communication.&lt;/p&gt;

&lt;h3 id=&quot;it-is-about-building-communities&quot;&gt;It is about building communities&lt;/h3&gt;

&lt;p&gt;I like to work together with people working in IT. It was the most significant part of my work in the last 10-15 years. When I was not programming, I helped create all kinds of learning experiences for my colleagues. Open-sourcing IT Connect is an opportunity to create more communities and connect with more people.&lt;/p&gt;

&lt;h3 id=&quot;learning-something-new&quot;&gt;Learning something new&lt;/h3&gt;

&lt;p&gt;Making an open-source application comes means to learn new things, new tools, new frameworks. 
For example, I plan to finally grow my Javascript skills to pick up the ability to Vue.js production-ready and to get full-on into the last CSS abilities with TailwindCSS.&lt;/p&gt;

&lt;p&gt;Let the fun begin!&lt;/p&gt;</content><author><name>{&quot;twitter&quot;=&gt;&quot;lucianghinda&quot;}</name></author><category term="why" /><category term="projects" /><category term="open-source" /><summary type="html">I contributed bits and pieces to various open-source software, but nothing in the long run, I might say. I also was never a maintainer.</summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://ghinda.com/blog/assets/images/twitter-cards/why-start-an-open-source.png" /><media:content medium="image" url="https://ghinda.com/blog/assets/images/twitter-cards/why-start-an-open-source.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Momentum</title><link href="https://ghinda.com/blog/teams/2020/momentum.html" rel="alternate" type="text/html" title="Momentum" /><published>2020-06-19T00:00:00+00:00</published><updated>2020-06-19T00:00:00+00:00</updated><id>https://ghinda.com/blog/teams/2020/momentum</id><content type="html" xml:base="https://ghinda.com/blog/teams/2020/momentum.html">&lt;p&gt;When thinking about quality vs. speed, it is essential to acknowledge that only in the short term, these two are somehow incompatible. 
In the long run, the quality helps a lot with speed and, specifically, with momentum. But it is also the other way around; momentum helps a lot with building default quality. 
The more I think about this, the more I realize that maybe momentum is the only thing that we should consider when thinking about the product, productivity, and teams.&lt;/p&gt;

&lt;h1 id=&quot;what-is-momentum&quot;&gt;What is momentum?&lt;/h1&gt;
&lt;p&gt;I found a couple of article talking about momentum in the productivity context: &lt;a href=&quot;https://medium.com/swlh/meet-your-most-powerful-ally-for-productivity-momentum-19c1713be4ab&quot;&gt;one&lt;/a&gt;, &lt;a href=&quot;https://www.lifehack.org/articles/productivity/how-boost-productivity-through-building-momentum.html&quot;&gt;two&lt;/a&gt;, &lt;a href=&quot;https://www.theladders.com/career-advice/to-build-productivity-momentum-surround-yourself-with-progress&quot;&gt;three&lt;/a&gt;, &lt;a href=&quot;https://blog.teamwork.com/4-ways-gain-momentum-trust-team/&quot;&gt;four&lt;/a&gt;. Probably there are many more, but this is what I found on a simple search. While some of them have good recommendations for personal use, I did not find yet one that deeply analyses this from a team perspective.&lt;/p&gt;

&lt;p&gt;I propose momentum as one of the essential qualities to watch while thinking about team productivity over the long run.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;defining-momentum-for-team-and-individuals&quot;&gt;Defining momentum for team and individuals&lt;/h2&gt;

&lt;h3 id=&quot;momentum-in-the-real-world&quot;&gt;Momentum in the real world&lt;/h3&gt;

&lt;p&gt;In physics momentum is &lt;a href=&quot;https://www.britannica.com/science/momentum&quot;&gt;defined&lt;/a&gt; as:&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;Momentum, product of the  &lt;a href=&quot;https://www.britannica.com/science/mass-physics&quot;&gt;mass&lt;/a&gt;  of a particle and its  &lt;a href=&quot;https://www.britannica.com/science/velocity&quot;&gt;velocity&lt;/a&gt; . Momentum is a  &lt;a href=&quot;https://www.britannica.com/science/vector-physics&quot;&gt;vector&lt;/a&gt;  quantity; i.e., it has both magnitude and direction.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Yet, for what I am trying to explain here, I like more &lt;a href=&quot;https://www.merriam-webster.com/dictionary/momentum&quot;&gt;this definition&lt;/a&gt; from Merriam-Webster:&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;strength or force gained by motion or by a series of events&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3 id=&quot;scalars-and-vectors&quot;&gt;Scalars and vectors&lt;/h3&gt;

&lt;p&gt;Before going into more details, let’s make one difference here between scalars and vector quantity:&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;A vector has magnitude and direction. Example of vectors in physics: acceleration, momentum&lt;/li&gt;
  &lt;li&gt;A scalar has the only size. Example of scalars in physics: volume, speed, mass, density&lt;/li&gt;
&lt;/ol&gt;

&lt;h3 id=&quot;velocity-in-physics-vs-velocity-in-agile&quot;&gt;Velocity in physics vs. velocity in agile&lt;/h3&gt;

&lt;p&gt;Velocity is &lt;a href=&quot;https://www.britannica.com/science/velocity&quot;&gt;defined&lt;/a&gt; in physics as “how fast and in what direction a point is moving.”  Velocity in physics is a vector, thus providing magnitude and direction.&lt;/p&gt;

&lt;p&gt;Velocity in Agile &lt;a href=&quot;https://www.agilealliance.org/glossary/velocity&quot;&gt;is defined&lt;/a&gt; as:&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;the team adds up effort  &lt;a href=&quot;http://guide.agilealliance.org/guide/nuts.html&quot;&gt;estimates&lt;/a&gt;  associated with  &lt;a href=&quot;http://guide.agilealliance.org/guide/stories.html&quot;&gt;user stories&lt;/a&gt;  that were  &lt;a href=&quot;http://guide.agilealliance.org/guide/sashimi.html&quot;&gt;completed&lt;/a&gt;  during that iteration. This total is called velocity.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In Agile velocity is a scalar. It does not show direction. It is just a magnitude.&lt;/p&gt;

&lt;p&gt;One could argue (in Scrum, for example) that the direction is given by the fact that people are working toward building a product increment. 
I don’t think this holds because people are adding effort associated with completed user stories, but there is no way to understand if that effort is required for a particular user story. So there is no way to assess if the current amount of work done is in a specific direction while in the sprint. 
Only at the end of the sprint, one can understand if how much from what was done was in the required direction.&lt;/p&gt;

&lt;p&gt;Another argument could be that direction is given by early feedback. While this indeed provides an arrow, it is not part of velocity. It is part of some agile processes to guide a team toward a goal with early feedback.&lt;/p&gt;

&lt;p&gt;But in practice, one can observe that people count velocity as the total amount of effort spent in a period.&lt;/p&gt;

&lt;p&gt;There might be ways to add direction to velocity, but I will try to argue further than focusing on the velocity. It is not a sustainable purpose in the long run, with all the possible corrections for matching the desired outcome.&lt;/p&gt;

&lt;h2 id=&quot;momentum-is-a-specific-type-of-vector&quot;&gt;Momentum is a specific type of vector&lt;/h2&gt;

&lt;p&gt;A team having momentum is a team that:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;keeps moving toward an outcome they desire&lt;/li&gt;
  &lt;li&gt;it is visible they are going into that direction&lt;/li&gt;
  &lt;li&gt;can keep this pacing without mental effort - seems effortless to continue.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In our case, momentum is a specific type of vector for productivity as it is not just a measure of where we are now and where we are going, but it is also a measure of the force that will continuously pull us into that direction.&lt;/p&gt;

&lt;p&gt;I think you know this feeling of momentum:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;it was that time when you said you are “on a roll.”&lt;/li&gt;
  &lt;li&gt;it was that time when you kept pushing code to production day after day&lt;/li&gt;
  &lt;li&gt;it was that series of sprints when you delivered the outcome and the customers where happy&lt;/li&gt;
  &lt;li&gt;it was that period when you had engaging conversations with your customers, and together you were building a great product without the hassle&lt;/li&gt;
  &lt;li&gt;it was those daily discussions which created the fantastic architecture/technical breakthrough&lt;/li&gt;
  &lt;li&gt;it was that time when in 5 minutes you finally wrote that function which took previous days hours to write and delete and then move on to write another one and another one&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h1 id=&quot;why-momentum-is-important&quot;&gt;Why momentum is important&lt;/h1&gt;

&lt;h2 id=&quot;the-case-against-agile-velocity&quot;&gt;The case against agile velocity&lt;/h2&gt;

&lt;p&gt;As I explained above, velocity in agile implementations is a scalar, it is just a quantity, but this is not the only problem.&lt;/p&gt;

&lt;p&gt;The big problem is that velocity is a subjective quantity while trying to appear objective. It does not help inside the team because it cannot be increased or decreased by themselves in any significant way and also cannot be compared with other teams as it is subjective. Change something about the team (structure, organization, technology). This metric will change. You will only see how significant the change is without having anything actionable from this number.&lt;/p&gt;

&lt;p&gt;A second argument against measuring speed is that it creates the wrong incentive where any compromise is okay as long as it speeds up development. The wrong here is that people apply this only thinking about the present moment. So it sacrifices quality for speed. And in the future, when your app is bigger with more lines of code and more complex architecture, these compromises - actually technical debt - will act as a break.&lt;/p&gt;

&lt;h2 id=&quot;there-are-many-hidden-forms-of-velocity&quot;&gt;There are many hidden forms of velocity&lt;/h2&gt;

&lt;p&gt;Try not to let yourself tricked by the fact that people use some other metrics. Most of them are a quantity, and most of them are different forms of measuring a kind of length or speed when time is taken into account.&lt;/p&gt;

&lt;p&gt;Here are some examples:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Number of stories implemented&lt;/li&gt;
  &lt;li&gt;Number of merge requests successfully merged&lt;/li&gt;
  &lt;li&gt;Number of tests passed&lt;/li&gt;
  &lt;li&gt;Number of bugs fixed (per area, per classification, per severity, per impact)&lt;/li&gt;
  &lt;li&gt;Number of releases&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Divide by a time quantity (like daily, weekly), and you will get a kind of speed.&lt;/p&gt;

&lt;p&gt;I am not saying that these metrics are wrong. I am arguing first that they are not very useful when thinking about creating value for customers/users. And more important that most of the time, they can very quickly become the single focus, thus affecting the decision process. 
I was too many times in meetings and discussions when one of these metrics, which in the beginning was introduced just as a no-judgment plain number, was taken into consideration as the most important thing.&lt;/p&gt;

&lt;p&gt;It is happening when times are hard: something happened with the product/in the market, and suddenly people need to look into what happened and how they can improve the current situation. They remember that they were gathering these metrics (number of X) and start looking at them to usually find data to confirm a decision. This is how developers are usually feeling pushed to do more user stories or testers to execute more tests.&lt;/p&gt;

&lt;h2 id=&quot;the-value-of-momentum&quot;&gt;The value of momentum&lt;/h2&gt;

&lt;p&gt;I think momentum is genuinely one of the best metrics to measure when thinking about productivity. 
True, it is hard to measure.
Yet it is what makes the difference between a high-performing team and one that seems busy without producing a valuable outcome.
For me, #momentum is precisely why the #agile #manifesto was created. To support teams/individuals to gain momentum and be able to make their creation happen.&lt;/p&gt;

&lt;hr /&gt;

&lt;h1 id=&quot;how-to-measure-momentum&quot;&gt;How to measure momentum?&lt;/h1&gt;

&lt;h2 id=&quot;real-ways-hard-to-measure&quot;&gt;Real ways, hard to measure&lt;/h2&gt;
&lt;p&gt;Here is the most sincere way to measure momentum: ask the team. If you have a good relationship with the team, then you will know if they have momentum.&lt;/p&gt;

&lt;p&gt;You can also watch how the team communicates blockers. If the blockers are inside team reach, then the team does not have momentum. If the blockers are outside team reach and they are a lot, then also the team does not have momentum.&lt;/p&gt;

&lt;p&gt;You can also watch the team. Look at interactions, communication,  communicating, how they are doing progress.&lt;/p&gt;

&lt;h2 id=&quot;other-possibilities&quot;&gt;Other possibilities&lt;/h2&gt;

&lt;p&gt;First: I think momentum is &lt;em&gt;best measured when thinking about a team, not about an individual&lt;/em&gt;. Because at the individual level is can be very easy to go into focusing on wrong things (time spent while doing X)&lt;/p&gt;

&lt;p&gt;Second: I think &lt;em&gt;there should be different metrics based on the team’s particularities&lt;/em&gt;. Some teams need more data and react to that very well. Other teams need more guidance about the outcome than about the quantity of x done.&lt;/p&gt;

&lt;p&gt;Third: &lt;em&gt;Measuring momentum works only if the work can be split into small chunks&lt;/em&gt;. If the work cannot be split into small chunks, then it is tough to track momentum. In general, it is very hard to measure any outcome because there is a long delay between the team starts working and the moment that an outcome or business objective can be asserted.&lt;/p&gt;

&lt;p&gt;It is tough to measure momentum. So bear with me while I try to explain how I think about it.&lt;/p&gt;

&lt;h2 id=&quot;blockers-for-momentum&quot;&gt;Blockers for momentum&lt;/h2&gt;

&lt;p&gt;It is more comfortable to identify blockers for momentum. Here are some examples of blockers:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;1.&lt;/em&gt; &lt;em&gt;Meetings per day&lt;/em&gt; = how many meetings the team has per day. Add an extra weight when the meetings include participants from outside the team. Bigger is worse. I am here defining meeting as being asynchronous meeting where all attendees are required, and they need to be focused from start time to end time.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;2.&lt;/em&gt; &lt;em&gt;Decision queue&lt;/em&gt; = how many work items are waiting for decisions from people outside the team. Bigger is worse here. Having a lot of work items blocked by people outside the time is definitely one of the best ways to not have momentum.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;3.&lt;/em&gt; &lt;em&gt;The estimated dimension of work items&lt;/em&gt; = how long will probably take to implement a work item (requirement, user story, task). Momentum is not working when the progress is defined while taking into account periodicity bigger than days. It seems like splitting things into smaller pieces works wonders. See &lt;a href=&quot;https://behavioralscientist.org/to-achieve-your-goals-lump-and-slice&quot;&gt;https://behavioralscientist.org/to-achieve-your-goals-lump-and-slice&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;4.&lt;/em&gt; &lt;em&gt;Pressure to achieve quantities&lt;/em&gt; Whenever a team is pressured to achieve a number, they will focus on achieving the number, which creates a kind of mental pressure which kills the desired part of the momentum. One cannot have momentum while doing something they don’t agree with, or they find useless. Want to hear what most of developers or testers think when asked to count items of their work? They DO NOT LIKE this and usually are frustrated by this requirement.&lt;/p&gt;

&lt;h2 id=&quot;hints-about-momentum&quot;&gt;Hints about momentum&lt;/h2&gt;

&lt;p&gt;Then let’s thing about signs that you can see in your team, and they hint that maybe your team has momentum:&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;&lt;em&gt;The flow of ideas&lt;/em&gt; = while talking about a specific issue, implementation, architecture, bug work team members are building upon each other ideas.&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;Focus on delivering&lt;/em&gt; = you can see this in many moments when a discussion tends to get too philosophical or too long that the team will correct themselves and focus on “What should we do to deliver this feature?”&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;Quality is built-in&lt;/em&gt; = this is when you see that the team does not need guidance or reminders about quality. They are doing progress and embed quality within.&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;Delegating anything extra for the future&lt;/em&gt; = the team is not rejecting changes or extra things because they are very focused on what they are doing, so no energy can be spent on fighting change. They are just delegating extra things for the future.&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;High interest in defining work items&lt;/em&gt; = While discussing next work items team gives valuable feedback about how to transform it so that it is implemented with good quality and customer satisfaction&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Possible there are many many more signs than these. 
Again teams can differ a lot on how they “look like” when they are high-performing.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;Thanks to &lt;a href=&quot;https://www.linkedin.com/in/ciprianhodorogea/&quot;&gt;Ciprian Hodorogea&lt;/a&gt; for reading drafts of this and giving me valuable feedback.&lt;/p&gt;</content><author><name>{&quot;twitter&quot;=&gt;&quot;lucianghinda&quot;}</name></author><category term="teams" /><category term="backtobasics" /><category term="metrics" /><category term="what-to-measure" /><summary type="html">When thinking about quality vs. speed, it is essential to acknowledge that only in the short term, these two are somehow incompatible. In the long run, the quality helps a lot with speed and, specifically, with momentum. But it is also the other way around; momentum helps a lot with building default quality. The more I think about this, the more I realize that maybe momentum is the only thing that we should consider when thinking about the product, productivity, and teams.</summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://ghinda.com/blog/assets/images/twitter-cards/momentum.png" /><media:content medium="image" url="https://ghinda.com/blog/assets/images/twitter-cards/momentum.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Open Source Policy - Examples and best practices</title><link href="https://ghinda.com/blog/opensource/2020/open-source-policy-examples-and-best-practices.html" rel="alternate" type="text/html" title="Open Source Policy - Examples and best practices" /><published>2020-06-06T00:00:00+00:00</published><updated>2020-06-06T00:00:00+00:00</updated><id>https://ghinda.com/blog/opensource/2020/open-source-policy-examples-and-best-practices</id><content type="html" xml:base="https://ghinda.com/blog/opensource/2020/open-source-policy-examples-and-best-practices.html">&lt;p&gt;&lt;em&gt;I am working with &lt;a href=&quot;https://www.metrosystems.ro?ref=ghindacom&quot;&gt;METRO SYSTEMS&lt;/a&gt; to open-source one of the applications we created for our innovation projects. Part of this process I started looking at what open source policies different companies have, and I am sharing my findings here.&lt;/em&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;This article is not a comprehensive review of open-source policies. I picked up companies based on a list from the &lt;a href=&quot;https://todogroup.org&quot;&gt;TODO Group&lt;/a&gt;. This is a short review of some open-source policies where companies are encouraging their employees to open source their work or contribute to open source projects.&lt;/p&gt;

&lt;p&gt;Here is what you will find in this article:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;#summary&quot;&gt;A summary of what to include in an open source policy&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#buffer-open-source-policy&quot;&gt;Buffer Open Source Policy&lt;/a&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;#about-buffer&quot;&gt;About Buffer&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#talking-about-real-questions-or-dilemmas&quot;&gt;Questions about open source&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#what-should-be-in-an-open-source-policy---faq&quot;&gt;Frequent Asked Questions&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#open-source-at-gitlab&quot;&gt;Open Source at Gitlab&lt;/a&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;#about-gitlab&quot;&gt;Gitlab values and open-source&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#open-sourcing-a-project&quot;&gt;Open sourcing a project&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#contributing-to-open-source&quot;&gt;Contributing to open source&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#using-open-source-libraries&quot;&gt;Using open-source libraries&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#proprietary-information-and-assignment-agreement&quot;&gt;Proprietary Information and Assignment Agreement&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#joyent-open-source-policy&quot;&gt;Joyent - open source policy&lt;/a&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;#about-joyent&quot;&gt;About Joyent&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#open-source-counsel-office&quot;&gt;Open Source Counsel Office&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#licenses&quot;&gt;Licenses&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#how-to-contribute&quot;&gt;How to contribute&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#creating-an-open-source&quot;&gt;Creating an open-source&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#google-open-source-policy&quot;&gt;Google Open Source Policy&lt;/a&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;#about-open-source-at-google&quot;&gt;About open-source at Google&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#releasing-code-as-open-source&quot;&gt;Releasing code&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#contributing-to-open-source-1&quot;&gt;Contributing to open-source&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#personal-projects&quot;&gt;Personal projects&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#participating-to-hackathons&quot;&gt;Participating to Hackathons&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#using-open-source-projects&quot;&gt;Using open-source&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#growing-an-open-source-ecosystem&quot;&gt;Growing an open-source ecosystem&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#how-dropbox-uses-cla&quot;&gt;How Dropbox uses CLA&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#why-gitlab-transitioned-from-cla-to-dco&quot;&gt;Why Gitlab transitioned from CLA to DCO&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#resources&quot;&gt;More resources to read&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h1 id=&quot;summary&quot;&gt;Summary&lt;/h1&gt;

&lt;p&gt;It seems like a well-done open-source policy should address at least 3 areas:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Creating&lt;/strong&gt; a new open-source software&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Using&lt;/strong&gt; open-source software in a proprietary software&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Contributing&lt;/strong&gt; to open-source as an employee of a company&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;https://ghinda.com/blog/assets/images/articles/2020/06/open-source-policy-what-to-take-into-consideration.png&quot; alt=&quot;Open Source Policy - Topics to include&quot; class=&quot;full-width-img&quot; /&gt;&lt;/p&gt;

&lt;p&gt;When discussing &lt;strong&gt;creating open-source software&lt;/strong&gt; (or releasing code as open-source) some points to take into consideration are:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;What type of licenses to use?&lt;/li&gt;
  &lt;li&gt;Where will the code be released?&lt;/li&gt;
  &lt;li&gt;Usually, there is a flow of steps to be checked before releasing:
    &lt;ul&gt;
      &lt;li&gt;Reviews (security, privacy)&lt;/li&gt;
      &lt;li&gt;Legal approvals&lt;/li&gt;
      &lt;li&gt;Communication&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;How to structure the code
    &lt;ul&gt;
      &lt;li&gt;The best option here is to create a boilerplate/template for a project including Code of Conduct, Governance, Readme and How to contribute&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;A kind of support group/person who can guide and answer questions a developer has regarding their open source project&lt;/li&gt;
  &lt;li&gt;Who owns the IP for the created software&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;When talking about &lt;strong&gt;using open-source software&lt;/strong&gt; inside projects, some points to take into consideration are:&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;What kind of licenses does the open-source have?
    &lt;ul&gt;
      &lt;li&gt;Implications of using permissive vs. copyleft licenses for the copyright of the current projects&lt;/li&gt;
      &lt;li&gt;Liability&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Requirements implied by the open-source license&lt;/li&gt;
  &lt;li&gt;Management of third-party software (upgrade, patching, bug fixing)&lt;/li&gt;
  &lt;li&gt;Security reviews&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;When talking about &lt;strong&gt;contributing to open-source&lt;/strong&gt;, some essential points to take into consideration are:&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;What kind of license the open-source project has?&lt;/li&gt;
  &lt;li&gt;How does the contribution involve the current company?&lt;/li&gt;
  &lt;li&gt;Attribution - make it clear who is the contributor to the employee of the company?&lt;/li&gt;
  &lt;li&gt;Who owns the IP of the contribution if there is any?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;It is also essential to address three more things about creating an open-source:&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;&lt;em&gt;Community&lt;/em&gt; - how would you take care of a community of users or contributors. Nobody is saying you should have a strategy for this, but it sure helps if you care about your community and help others use your creation&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;Tools&lt;/em&gt; - It is easier to have guidelines about what kind of tools to use when creating open-source. I don’t think this list should be prescriptive, but it should be a suggestion.&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;Public Common Repository&lt;/em&gt; - usually, companies have not only a handler on Github or Gitlab or any other version control repository but also a public page on their websites (sometimes a subdomain like opensource.companywebsite).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;It is important to take into consideration that you are writing this policy as a guide for an employee of your company. In this case, then the policy can be written from the perspective of the developer and should address possible questions, blockages the individual has. It could be like answering “How to” questions.&lt;/p&gt;

&lt;p&gt;The length of the policy could influence how easy people start creating or contributing to open source. A lengthy policy might be putting off people to start open source because it makes the process look hard. A concise one might not address big questions and thus creating uncertainty.&lt;/p&gt;

&lt;p&gt;Below you can find simple reviews of some examples of open source policies. 
They are from companies part of &lt;a href=&quot;https://todogroup.org/about/&quot;&gt;TODO Group&lt;/a&gt; (Talk Openly, Develop Openly).&lt;/p&gt;

&lt;hr /&gt;

&lt;h1 id=&quot;example-of-open-source-policies-from-different-companies&quot;&gt;Example of open source policies from different companies&lt;/h1&gt;

&lt;h2 id=&quot;buffer-open-source-policy&quot;&gt;Buffer Open Source Policy&lt;/h2&gt;

&lt;h3 id=&quot;about-buffer&quot;&gt;About Buffer&lt;/h3&gt;

&lt;p&gt;From their website &lt;a href=&quot;https://buffer.com&quot;&gt;https://buffer.com&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;We’re a fully distributed team of 85 people living and working in 15 countries around the world. And we’re working to build the best products to help our customers build their brands and grow their businesses on social media.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The list of their open-source projects is &lt;a href=&quot;https://buffer.com/open-source&quot;&gt;https://buffer.com/open-source&lt;/a&gt;, the open-source policy is &lt;a href=&quot;https://open.buffer.com/guide-open-source&quot;&gt;https://open.buffer.com/guide-open-source&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&quot;talking-about-real-questions-or-dilemmas&quot;&gt;Talking about real questions or dilemmas&lt;/h3&gt;

&lt;p&gt;Possible reasons why employees are not thinking about open sourcing are around the following lines of thoughts:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;I wasn’t sure if I could open-source that.&lt;/li&gt;
  &lt;li&gt;I wasn’t sure if it was even safe to open source.&lt;/li&gt;
  &lt;li&gt;I wasn’t clear if it was okay to spend time doing that.&lt;/li&gt;
  &lt;li&gt;I don’t know what our “process” is for open-sourcing code, do we even have one?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;More effort should be made to educate colleagues on how to open source their code.&lt;/p&gt;

&lt;h3 id=&quot;what-should-be-in-an-open-source-policy---faq&quot;&gt;What should be in an open-source policy - FAQ&lt;/h3&gt;

&lt;p&gt;Buffer open source policy is mostly a list of FAQ containing answers to the following questions (&lt;a href=&quot;http://bufferapp.github.io/img/boss.png&quot;&gt;click here&lt;/a&gt; to see it as an image):&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;What license do we release software under?&lt;/li&gt;
  &lt;li&gt;What can I open source?&lt;/li&gt;
  &lt;li&gt;What should I open source?&lt;/li&gt;
  &lt;li&gt;Can I spend time on open source? Is it part of our cycles? Can I spend time contributing back to other open-source projects?&lt;/li&gt;
  &lt;li&gt;How do I open source – what’s it all look like end to end?
    &lt;ul&gt;
      &lt;li&gt;Check if it is secure and does not contain sensitive data&lt;/li&gt;
      &lt;li&gt;Notice the team that you want to open source&lt;/li&gt;
      &lt;li&gt;Add Readme&lt;/li&gt;
      &lt;li&gt;Make the repo on Github&lt;/li&gt;
      &lt;li&gt;Celebrate&lt;/li&gt;
      &lt;li&gt;Add the project to the open-source page&lt;/li&gt;
      &lt;li&gt;Promote it&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Any general tips?&lt;/li&gt;
&lt;/ol&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;open-source-at-gitlab&quot;&gt;Open Source at Gitlab&lt;/h2&gt;

&lt;h3 id=&quot;about-gitlab&quot;&gt;Gitlab values and open-source&lt;/h3&gt;

&lt;p&gt;Gitlab is defining itself as a company dedicated to open source and encourage its employees to give back to the community, thus living their &lt;a href=&quot;https://about.gitlab.com/handbook/values/#collaboration&quot;&gt;Collaboration&lt;/a&gt; and &lt;a href=&quot;https://about.gitlab.com/handbook/values/#transparency&quot;&gt;Transparency&lt;/a&gt; values.&lt;/p&gt;

&lt;p&gt;Their public open source policy can be found in thier Handbook at &lt;a href=&quot;https://about.gitlab.com/handbook/engineering/open-source/&quot;&gt;https://about.gitlab.com/handbook/engineering/open-source&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&quot;open-sourcing-a-project&quot;&gt;Open sourcing a project&lt;/h3&gt;

&lt;p&gt;What should be taken into consideration when open sourcing a project:&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;Which license to use&lt;/li&gt;
  &lt;li&gt;Where to publish&lt;/li&gt;
  &lt;li&gt;Any approvals needed?&lt;/li&gt;
  &lt;li&gt;Readme:
    &lt;ul&gt;
      &lt;li&gt;a. Code of conduct&lt;/li&gt;
      &lt;li&gt;b. License&lt;/li&gt;
      &lt;li&gt;c. How to contribute&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;h3 id=&quot;contributing-to-open-source&quot;&gt;Contributing to open source&lt;/h3&gt;

&lt;p&gt;Contributing to a third party project tries to address:&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;Contributor license agreement&lt;/li&gt;
  &lt;li&gt;Contributing to a project on Gitlab where they invite their employees to fork and then follow the project’s Merge Request process&lt;/li&gt;
  &lt;li&gt;Contributing to a project on Github where they invite their employees to fork and then follow the project’s Pull Request process&lt;/li&gt;
&lt;/ol&gt;

&lt;h3 id=&quot;using-open-source-libraries&quot;&gt;Using open source libraries&lt;/h3&gt;

&lt;p&gt;What are the acceptable licenses:&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;&lt;a href=&quot;https://choosealicense.com/licenses/mit/&quot;&gt;MIT License&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://choosealicense.com/licenses/lgpl-3.0/&quot;&gt;GNU Lesser General Public License (GNU LGPL)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://choosealicense.com/licenses/apache-2.0/&quot;&gt;Apache 2.0 License&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/ruby/ruby/blob/ruby_1_8_6/COPYING&quot;&gt;Ruby 1.8 License&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.ruby-lang.org/en/about/license.txt&quot;&gt;Ruby 1.9 License&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://opensource.org/licenses/BSD-2-Clause&quot;&gt;BSD 2-Clause License&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://opensource.org/licenses/BSD-3-Clause&quot;&gt;BSD 3-Clause License&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://opensource.org/licenses/ISC&quot;&gt;ISC License&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://creativecommons.org/publicdomain/zero/1.0/&quot;&gt;Creative Commons Zero (CC0)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://unlicense.org/&quot;&gt;Unlicense&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.openwebfoundation.org/legal/the-owf-1-0-agreements/owfa-1-0&quot;&gt;OWFa 1.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.json.org/license.html&quot;&gt;JSON License&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;What are unacceptable licenses (which require legal approval for the use):&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;&lt;a href=&quot;https://choosealicense.com/licenses/gpl-3.0/&quot;&gt;GNU GPL&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://choosealicense.com/licenses/agpl-3.0/&quot;&gt;GNU AGPLv3&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://opensource.org/licenses/OSL-3.0&quot;&gt;Open Software License (OSL)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://wtfpl.net/&quot;&gt;WTFPL&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;They also provide an email where an employee could write to ask about the license they want to use for their project or about the license of a component/project they want to use in their own work. There is two type of approvals: case by case or for universal use.&lt;/p&gt;

&lt;p&gt;Gitlab also invites their employees not to use forked code but to contribute changes to upstream, also providing reasons for why this is a good decision: it might become hard to rebase the branch and also there might be other libraries from the same project depending on the original version.&lt;/p&gt;

&lt;h3 id=&quot;proprietary-information-and-assignment-agreement&quot;&gt;Proprietary Information and Assignment Agreement&lt;/h3&gt;

&lt;p&gt;It is important to observe that on this page, Gitlab has a link to a &lt;a href=&quot;https://about.gitlab.com/handbook/contracts/#piaa-agreements&quot;&gt;PIAA Agreements section&lt;/a&gt; part of a section about how to create a contract for a new employee. There they explain that:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Our PIAA does not grant GitLab any rights in any creations that you may make that are not related to GitLab’s business or the work you do for GitLab. That is, you are free to develop those creations without requesting approval in advance from GitLab.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I think this is a very good thing because this addresses questions related to side projects employees do and want to open source.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;joyent-open-source-policy&quot;&gt;Joyent open source policy&lt;/h2&gt;

&lt;h3 id=&quot;about-joyent&quot;&gt;About Joyent&lt;/h3&gt;

&lt;p&gt;From their website &lt;a href=&quot;https://www.joyent.com/about&quot;&gt;https://www.joyent.com&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;Since our inception, Joyent has lived on the leading edge of technical innovation. Our team pioneered public cloud computing (and hybrid cloud), nurtured and grew Node.js into a de facto standard for web, mobile and IoT architectures, and was among the first to embrace and industrialize containers, compute-centric object storage, and what is now coming to be known as serverless computing.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You can read their Open Source Policy at &lt;a href=&quot;https://github.com/joyent/rfd/blob/master/rfd/0164/README.md&quot;&gt;https://github.com/joyent/rfd/blob/master/rfd/0164/README.md&lt;/a&gt; and browse their Github Repositories at &lt;a href=&quot;https://github.com/joyent&quot;&gt;https://github.com/joyent&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Joyent open-sourced their entire software stack in 2014.&lt;/p&gt;

&lt;h3 id=&quot;open-source-counsel-office&quot;&gt;Open Source Counsel Office&lt;/h3&gt;

&lt;p&gt;First, they talk about creating a role named, Open Source Counsel Office (OSCO) that serves a central point for &lt;em&gt;“consultation and approval with respect to open source policy”&lt;/em&gt;.&lt;/p&gt;

&lt;h3 id=&quot;licenses&quot;&gt;Licenses&lt;/h3&gt;

&lt;p&gt;Approved list of licenses that can be used without consulting OSCO:&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;Mozilla Public License, 1.0, 1.1 and 2.0 variants&lt;/li&gt;
  &lt;li&gt;MIT License&lt;/li&gt;
  &lt;li&gt;Berkeley Software Distribution (BSD), 3-clause, 2-clause, and 0-clause variants&lt;/li&gt;
  &lt;li&gt;Apache License, 1.0, 1.1 and 2.0 variants&lt;/li&gt;
  &lt;li&gt;Common Development and Distribution License (CDDL)&lt;/li&gt;
  &lt;li&gt;PostgreSQL License&lt;/li&gt;
  &lt;li&gt;Python Software Foundation License&lt;/li&gt;
  &lt;li&gt;Public Domain&lt;/li&gt;
  &lt;li&gt;Artistic License&lt;/li&gt;
  &lt;li&gt;zlib/libpng license&lt;/li&gt;
  &lt;li&gt;PHP License&lt;/li&gt;
  &lt;li&gt;ICU License&lt;/li&gt;
  &lt;li&gt;Eclipse Public License&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Then they have a list of licenses that can be used for internal use but cannot be used for external use without consulting OSCO:&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;GNU Public License (GPL), v2 and v3&lt;/li&gt;
  &lt;li&gt;Lesser GNU Public License (LGPL)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;And a list of licenses that can be used for internal-only with approval:&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;Affero General Public License (AGPL)&lt;/li&gt;
  &lt;li&gt;Server Side Public License (SSPL)&lt;/li&gt;
  &lt;li&gt;Confluent Community License&lt;/li&gt;
  &lt;li&gt;Redis Source Available License&lt;/li&gt;
  &lt;li&gt;Any license bearing a Commons Clause addendum&lt;/li&gt;
&lt;/ol&gt;

&lt;h3 id=&quot;how-to-contribute&quot;&gt;How to contribute&lt;/h3&gt;

&lt;p&gt;Further, their policy talks about how actively pushing changes upstream and setting some guidelines for contribution:&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;Personal attribution - where they make very clear that attribution should always be of the engineer who created the code&lt;/li&gt;
  &lt;li&gt;Copyright where they talk about how to write the copyright depending on the license and invite their employees to use company email addresses&lt;/li&gt;
  &lt;li&gt;Copyright notice where they indicate that they prefer to have the license included in the header of every file&lt;/li&gt;
  &lt;li&gt;Contributing source from third parties: where the guideline is to work with OSCO&lt;/li&gt;
  &lt;li&gt;De minimis change where they define that minimize changes does not need to have a copyright notice&lt;/li&gt;
  &lt;li&gt;Conduct which is referring responsibility to employees to report to OSCO or HR any misconduct&lt;/li&gt;
  &lt;li&gt;In case there is a need for Contributor License agreement that should be addressed with OSCO&lt;/li&gt;
&lt;/ol&gt;

&lt;h3 id=&quot;creating-an-open-source&quot;&gt;Creating an open-source&lt;/h3&gt;

&lt;p&gt;The last part of this document outlines open-source creation:&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;A place for publishing repositories: &lt;a href=&quot;https://github.com/joyent&quot;&gt;Github Joyent account&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;License: the preferred License is &lt;a href=&quot;https://www.mozilla.org/en-US/MPL/2.0/&quot;&gt;Mozilla Public License Version 2.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Security: inviting to careful inspection to make sure no secrets are divulged&lt;/li&gt;
  &lt;li&gt;They invite not to use Contributor license agreements as this might be an impediment to contributions&lt;/li&gt;
  &lt;li&gt;There is no formal code of conduct adopted, but they recommend in case it is needed (or advised by OSCO) to use a variant based on Contributor Covenant.&lt;/li&gt;
&lt;/ol&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;google-open-source-policy&quot;&gt;Google Open Source Policy&lt;/h2&gt;

&lt;h3 id=&quot;about-open-source-at-google&quot;&gt;About Open-Source at Google&lt;/h3&gt;

&lt;p&gt;Google has a website dedicated for open-source: &lt;a href=&quot;https://opensource.google/docs&quot;&gt;https://opensource.google/docs&lt;/a&gt;, where you can find their policy.&lt;/p&gt;

&lt;p&gt;Google has so far one of the most comprehensive documented open source policies: it addresses a lot of knowhow about how to create an open-source project (or release code), how to use open-source, and what Google is doing to support open source communities.&lt;/p&gt;

&lt;p&gt;They are part of the &lt;a href=&quot;https://todogroup.org&quot;&gt;TODO Group&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;You should go ahead and just read it. It is too big to summarise it. 
I will highlight some interesting things I found there that are worth considering when trying to create an open-source policy inside your company.&lt;/p&gt;

&lt;h3 id=&quot;releasing-code-as-open-source&quot;&gt;Releasing code as open-source&lt;/h3&gt;

&lt;p&gt;Google has a 5 step process:&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;Prepare (there is a Github repo with boilerplate for this &lt;a href=&quot;https://github.com/google/new-project&quot;&gt;https://github.com/google/new-project&lt;/a&gt;)&lt;/li&gt;
  &lt;li&gt;Stage&lt;/li&gt;
  &lt;li&gt;Get approval&lt;/li&gt;
  &lt;li&gt;Release&lt;/li&gt;
  &lt;li&gt;Patching&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;There is also a good section talking about differences between work-related project and personal project and a lot of good questions like:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;I want to update a repository that’s already gone through the launch process. Do I have to do it again?&lt;/li&gt;
  &lt;li&gt;Do I really have to get approval from my manager? This is just a tiny project! What gives?&lt;/li&gt;
  &lt;li&gt;What about projects from before I worked at Google?&lt;/li&gt;
  &lt;li&gt;This process is a pain, can you automate any of it?&lt;/li&gt;
  &lt;li&gt;What happens to my personal projects after I leave Google?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;They also talk about Github at Google and where the repositories and how to get access to them.&lt;/p&gt;

&lt;h3 id=&quot;contributing-to-open-source-1&quot;&gt;Contributing to open-source&lt;/h3&gt;

&lt;p&gt;Google encourages contributing to open source projects and, when possible, to use their Google.com email and Google LLC as project author. There is a list of situations when there is no need for review. They are a combination of what kind of license those projects have combined with requirements for CLA and a filtering list provided by Google.&lt;/p&gt;

&lt;p&gt;Also, there is a clear list of forbidden patches for any project that has any of the following licenses:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;No License&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://opensource.google/docs/thirdparty/licenses/#wtfpl-not-allowed&quot;&gt;WTFPL&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://opensource.google/docs/using/agpl-policy/&quot;&gt;AGPL&lt;/a&gt; (except those with special exceptions)&lt;/li&gt;
  &lt;li&gt;Public domain dedications (including CC0 and Unlicense). Exceptions: United States government projects; BSD0.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://opensource.google/docs/thirdparty/licenses/#noncommercial&quot;&gt;CC BY-NC-*&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Hippocratic License&lt;/li&gt;
  &lt;li&gt;Private repositories (unless under a written agreement between Google and a third party)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;personal-projects&quot;&gt;Personal projects&lt;/h3&gt;

&lt;p&gt;Here Google is very direct (&lt;a href=&quot;https://opensource.google/docs/iarc/&quot;&gt;https://opensource.google/docs/iarc/&lt;/a&gt;):&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;As part of your employment agreement, Google most likely owns the intellectual property (IP) you create while at the company. Because Google’s business interests are so wide and varied, this likely applies to any personal project you have. That includes new development on personal projects you created prior to employment at Google.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3 id=&quot;participating-to-hackathons&quot;&gt;Participating to Hackathons&lt;/h3&gt;

&lt;p&gt;Here Google addresses multiple interesting aspects like:&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;Subjects which are off-limits&lt;/li&gt;
  &lt;li&gt;Terms of the hackathon&lt;/li&gt;
  &lt;li&gt;What happens when an employee wants to be a judge or organizer&lt;/li&gt;
  &lt;li&gt;Lists of approved and not approved coding sides&lt;/li&gt;
  &lt;li&gt;Bug bounty&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In general, employees should not participate in hackathons where there is a request for any assignment of intellectual property rights. There are also there two templates of terms for the short-form and long-form hackathon.&lt;/p&gt;

&lt;p&gt;Also, an important topic addresses are about moving a project into an open-source foundation.&lt;/p&gt;

&lt;h3 id=&quot;using-open-source&quot;&gt;Using Open Source&lt;/h3&gt;

&lt;p&gt;One clear statement here is that AGPL is not allowed to be used at Google. 
Google also requires to add all third_party code into a folder third_party where all non-Google code and data should live. I think this is a sane approach because it makes it easy to know what is the code created inside the company and what code is imported from outside, thus making review strategies more clear and easy to implement.&lt;/p&gt;

&lt;p&gt;I also find very well written and good explanations about what to consider when someone wants to use code from outside Google. One of the clearest recommendations is to look for licenses of open-source code where there is no ambiguity about the following three rights:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;“the right to make copies (also known as reproduction)”&lt;/li&gt;
  &lt;li&gt;“the right to modify and adapt (also known as the right to do derivative works)”&lt;/li&gt;
  &lt;li&gt;“the right to distribute the original and modifications.”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Open Source Initiative has a list of OSI-approved licenses which give clear rights to users: &lt;a href=&quot;https://opensource.org/licenses&quot;&gt;https://opensource.org/licenses&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&quot;growing-an-open-source-ecosystem&quot;&gt;Growing an open-source ecosystem&lt;/h3&gt;

&lt;p&gt;Google has a strong involvement in open-source. So in their policy is a big chapter about current initiatives they have to support open sources. In case you want to support open-source inside and outside your company, you should read this. It will give you good ideas about what to do and how.&lt;/p&gt;

&lt;hr /&gt;

&lt;h1 id=&quot;other-important-things-to-take-into-consideration&quot;&gt;Other important things to take into consideration&lt;/h1&gt;

&lt;h2 id=&quot;how-dropbox-uses-cla&quot;&gt;How Dropbox uses CLA&lt;/h2&gt;

&lt;p&gt;Dropbox requires individuals or companies to agree to their Dropbox Contributor License Agreements.&lt;/p&gt;

&lt;p&gt;Here is the example for the Individual CLA: &lt;a href=&quot;https://opensource.dropbox.com&quot;&gt;https://opensource.dropbox.com&lt;/a&gt;
Here is the example for Company CLA: &lt;a href=&quot;https://opensource.dropbox.com/cla/company/&quot;&gt;https://opensource.dropbox.com/cla/company/&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;why-gitlab-transitioned-from-cla-to-dco&quot;&gt;Why Gitlab transitioned from CLA to DCO&lt;/h2&gt;

&lt;p&gt;Gitlab &lt;a href=&quot;https://about.gitlab.com/blog/2017/11/01/gitlab-switches-to-dco-license/&quot;&gt;switched&lt;/a&gt; from Contributor License Agreement to Developer’s Certificate of Origin to give developers greater flexibility and portability for their contributions. 
Read here their announcement about this transition here: &lt;a href=&quot;https://about.gitlab.com/blog/2017/11/01/gitlab-switches-to-dco-license&quot;&gt;https://about.gitlab.com/blog/2017/11/01/gitlab-switches-to-dco-license&lt;/a&gt;. They also share there why this decision was made.&lt;/p&gt;

&lt;h1 id=&quot;resources&quot;&gt;Resources&lt;/h1&gt;

&lt;p&gt;A list of links/resources I think are important to read when you are thinking to create an open-source policy:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;A list of open-source policies from companies part of TODO Group - &lt;a href=&quot;https://github.com/todogroup/policies&quot;&gt;https://github.com/todogroup/policies&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Guides and studies from TODO Group - &lt;a href=&quot;https://todogroup.org/guides&quot;&gt;https://todogroup.org/guides&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;An article with a very good review of common open-source software licenses and great comparisons between them. It also has a lot of examples of software using various licenses - &lt;a href=&quot;https://medium.com/@moqod_development/understanding-open-source-and-free-software-licensing-c0fa600106c9&quot;&gt;https://medium.com/@moqod_development/understanding-open-source-and-free-software-licensing-c0fa600106c9&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;A good document about things to take into consideration when starting an open-source program: &lt;a href=&quot;https://www.linuxfoundation.org/resources/open-source-guides/creating-an-open-source-program&quot;&gt;https://www.linuxfoundation.org/resources/open-source-guides/creating-an-open-source-program&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;WIRED Guide about Open Source, which is not exactly about how to create an open-source policy but very informative about open source in general: &lt;a href=&quot;https://www.wired.com/story/wired-guide-open-source-software/&quot;&gt;https://www.wired.com/story/wired-guide-open-source-software&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;A good document about what to take into consideration when creating an open-source program in an enterprise company: &lt;a href=&quot;https://www.ibrahimatlinux.com/uploads/6/3/9/7/6397792/compliancepractices_ebook_final.pdf&quot;&gt;https://www.ibrahimatlinux.com/uploads/6/3/9/7/6397792/compliancepractices_ebook_final.pdf&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;A summary of Gartner’s report, Technology Insight for Software Composition Analysis: &lt;a href=&quot;https://blog.sonatype.com/gartner-the-crucial-role-of-oss-license-compliance&quot;&gt;https://blog.sonatype.com/gartner-the-crucial-role-of-oss-license-compliance&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</content><author><name>{&quot;twitter&quot;=&gt;&quot;lucianghinda&quot;}</name></author><category term="innovation" /><category term="creativity" /><category term="problem solving" /><category term="models" /><summary type="html">I am working with METRO SYSTEMS to open-source one of the applications we created for our innovation projects. Part of this process I started looking at what open source policies different companies have, and I am sharing my findings here.</summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://ghinda.com/blog/assets/images/articles/2020/06/open-source-policy-what-to-take-into-consideration-preview.png" /><media:content medium="image" url="https://ghinda.com/blog/assets/images/articles/2020/06/open-source-policy-what-to-take-into-consideration-preview.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry></feed>