<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Wojtek Cichoń</title>
    <description>The latest articles on DEV Community by Wojtek Cichoń (@wojtekidd).</description>
    <link>https://dev.to/wojtekidd</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F87606%2F1efa8b69-84da-4e61-ad6e-8212b60d4af1.jpeg</url>
      <title>DEV Community: Wojtek Cichoń</title>
      <link>https://dev.to/wojtekidd</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/wojtekidd"/>
    <language>en</language>
    <item>
      <title>How to open source any code inside your company and what to remember about when doing so.</title>
      <dc:creator>Wojtek Cichoń</dc:creator>
      <pubDate>Wed, 08 Dec 2021 12:50:28 +0000</pubDate>
      <link>https://dev.to/wojtekidd/how-to-open-source-any-code-inside-your-company-and-what-to-remember-about-when-doing-so-126i</link>
      <guid>https://dev.to/wojtekidd/how-to-open-source-any-code-inside-your-company-and-what-to-remember-about-when-doing-so-126i</guid>
      <description>&lt;p&gt;Being in various job recruitments related to Open Source Software and having some experience in the field I’ve bumped into the following question:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;“How would you open source a piece of software and what benefits would it give to your company?”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This caught me off guard as I was always sure that open source is the way to go and kind of treated this way of distributing software as there were no other options (probably because I landed my first tech job at an OSS company). When trying to answer this question I couldn’t come up with a precise and elaborate answer. Only now, after open-sourcing a feature phone operating system from scratch, I can tell exactly how such a process might look like.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why should we open-source my codebase?
&lt;/h2&gt;

&lt;p&gt;To state the obvious - Open Source has won, etc. But let’s put it in a business perspective:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Sustainability and longevity&lt;/strong&gt; - even if your company suddenly switches to doing something completely different, goes low on manpower when it comes to sustaining its open-source code, or completely disappears from the face of the planet, there is still value in your code that can be sustained by a vibrant open source community.  &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Transparency&lt;/strong&gt; - if transparency is one of the core values inside your company or product community then open sourcing software is a living (giting?) proof that you’re serious about your values and give back to the community.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Security and quality&lt;/strong&gt; - more eyes on the code, more bugs squashed, more discussions about how to do things properly and securely.  &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Interoperability&lt;/strong&gt; - there are always people who see that your piece of code could be used in a different context or be combined with other solutions to bring more value to more people. This aspect builds on collaboration and transparency as well.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I’m leaving out the case of open source business models here since the topic is big and complex, but just remember that there are dozens of companies that earn gazillions and have their code completely open or distributed in &lt;a href="https://www.wikiwand.com/en/Open-core_model" rel="noopener noreferrer"&gt;an open core model&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where should I start? (AKA I have the code, now what?)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Get the organization’s buy-in first
&lt;/h3&gt;

&lt;p&gt;Let’s assume that you’re a newcomer to a company and your mission is to open source a piece of code that the development team has been working on for the past X years. You have to start building trust with both engineering and business units so that everyone is on the same page, knows what you’re trying to achieve and why it’s crucial to your business.&lt;/p&gt;

&lt;p&gt;Create a simple presentation introducing every group to the idea of Open Source and your particular case enumerating the business profits of going OSS. Be ready to address the fears of specific groups. Developers mostly fear that someone from the other side of the planet might find their code too spaghetti or spark up discussions around certain decisions that are reflected inside the code.&lt;/p&gt;

&lt;p&gt;The business units might be afraid that going open source means the end of business and profits as they know it (“Giving &lt;strong&gt;OUR&lt;/strong&gt; code away? For &lt;strong&gt;FREE&lt;/strong&gt;?”)&lt;/p&gt;

&lt;p&gt;What I did is I used &lt;a href="https://www.youtube.com/watch?v=a8fHgx9mE5U" rel="noopener noreferrer"&gt;this pretty good short animation to explain why open source is good&lt;/a&gt; inside a Google sheet presentation explaining:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What is Open Source&lt;/li&gt;
&lt;li&gt;Why it has been invented&lt;/li&gt;
&lt;li&gt;Why it’s good for our company&lt;/li&gt;
&lt;li&gt;What are the next steps (for engineering and business teams alike)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Holding these meetings separately inside specific teams and talking about the open-source movement will also help you out in identifying your first “go-to” people regarding writing documentation, making decisions, contacting the community, etc.&lt;/p&gt;

&lt;p&gt;The other way round is going to your Git platform admin and saying “Hi I’m Wojtek and I will open-source all your repos! Gimmie access!”&lt;/p&gt;

&lt;h2&gt;
  
  
  Decide on an open-source license
&lt;/h2&gt;

&lt;p&gt;Ask yourself these questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What are the business purposes of open source code in my company (if any)?&lt;/li&gt;
&lt;li&gt;What are the business risks of open source code in my company (if any)?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then read about the differences between licenses - my place to go is most often this &lt;a href="https://choosealicense.com/" rel="noopener noreferrer"&gt;“Choose an open-source license” page by GitHub&lt;/a&gt;. Easy to navigate and straightforward although…&lt;/p&gt;

&lt;h2&gt;
  
  
  Beware of the third-party software licenses trap
&lt;/h2&gt;

&lt;p&gt;Not really a trap tough - just wanted to add some exciting plot twist inside the article.&lt;/p&gt;

&lt;p&gt;Basically, it’s about what kind of licensed software you already have inside the piece of the codebase you’re trying to open up for contributions.&lt;/p&gt;

&lt;p&gt;You can have all of these: permissive, less-permissive, proprietary, etc. It can get complicated but in most cases, you have to make sure that:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;The license you choose doesn’t null other less-permissive licenses that your code includes (especially watch out for GPL which GPLs everything it touches)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You have paid a license fee for any open source code that is inside your codebase (so that your codebase can be used for commercial purposes)  &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Any proprietary assets and pieces of code are hidden to the eyes of the open-source community and are available only to the eyes of your company as the sole owner of the aforementioned. This part might mean that you’ll have to store assets in closed repos and link to them (suck them in) only when building your software for commercial purposes (make sure that you start doing so from the beginning, otherwise the links to proprietary pieces of digital assets stay in your Git history). &lt;a href="https://pixelambacht.nl/2017/github-font-piracy/" rel="noopener noreferrer"&gt;Remember to check your fonts licenses as well.&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This part can get complicated so don’t hesitate to reach out to people who own these codebases to make sure that you’re not infringing any licenses. After you get these details settled make sure that you describe everything inside your &lt;code&gt;LICENSE.md\&lt;/code&gt; file which is the default place to store your license info.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start with the documentation
&lt;/h2&gt;

&lt;h3&gt;
  
  
  The structure of technical documentation
&lt;/h3&gt;

&lt;p&gt;I’ll be brief here because it’s also a topic for separate discussions and articles. I usually stick to &lt;a href="https://documentation.divio.com/structure/" rel="noopener noreferrer"&gt;this structure for docs&lt;/a&gt; which was an eye-opener when I first read it. Make sure that you write the README.md in such a way that a person who isn’t technical and bumps into your repository by accident can say what this piece of code does and where they can start setting it up locally and exploring it further.&lt;/p&gt;

&lt;h3&gt;
  
  
  A how-to contribute article
&lt;/h3&gt;

&lt;p&gt;Be precise on how to start contributing to your code, explain the development workflow and localization workflow. Make sure that your repository is set up in such a way that people outside of your organization can contribute Pull Requests from forks, have the access rights to read the outcomes (logs, errors) of your CI pipeline, and can’t merge to the main branch without a proper code review from the maintainers of the code.&lt;/p&gt;

&lt;h3&gt;
  
  
  Code of conduct and inclusiveness
&lt;/h3&gt;

&lt;p&gt;Nowadays a Code of Conduct is a must-have so don’t forget about one. I recommend appropriating the &lt;a href="https://contributor-covenant.org/" rel="noopener noreferrer"&gt;CONTRIBUTOR COVENANT&lt;/a&gt; and tweaking it to your needs.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://todogroup.org/guides/diversity-inclusion/" rel="noopener noreferrer"&gt;Remember to be inclusive&lt;/a&gt; - wording matters.&lt;/p&gt;

&lt;h2&gt;
  
  
  Good first issues and issue templates
&lt;/h2&gt;

&lt;p&gt;Good first issues are the issues you can tag on the issue board to signal what are the low-hanging fruits. These might be pieces of documentation, entry-level code fixes, or test fixes that can be done by anyone with some proficiency in the programming language your codebase is written in.&lt;/p&gt;

&lt;p&gt;You can also set up some issue (and pull request) templates for your community so that whenever a new person addresses the issue you take them by the hand and help them describe it whether it’s a bug / feature request / new localization / anything else. There is &lt;a href="https://www.talater.com/open-source-templates/" rel="noopener noreferrer"&gt;a fun way to generate issue and PR templates&lt;/a&gt; as well.&lt;/p&gt;

&lt;h2&gt;
  
  
  Contributor License Agreement
&lt;/h2&gt;

&lt;p&gt;Oh no, another license! Or an agreement? Or whatever this is…  &lt;/p&gt;

&lt;p&gt;CLA is an important piece of the puzzle if you’re open-sourcing code that your company uses for commercial purposes (so I guess in most cases). This is an agreement between your contributors and your company as the code maintainer that all intellectual rights of future contributions will be ‘owned’ by the maintainer. This is a legal backup that you need to have just to make sure that when your company earns its first mill, it won’t be sued in court by someone who added a tiny functionality to the code.&lt;/p&gt;

&lt;p&gt;Signing the CLA can be automated and I highly recommend you set up this process with the help of &lt;a href="https://cla-assistant.io/" rel="noopener noreferrer"&gt;this CLA assistant&lt;/a&gt;. You can also find some ready-made CLA texts out there just waiting for you to be (responsibly) copied and pasted.&lt;/p&gt;

&lt;h2&gt;
  
  
  Get it out there!
&lt;/h2&gt;

&lt;p&gt;Once you feel that your code is ready to welcome your first contributors go spread the word! Use your in-house marketing team to help you and make sure that you also share the news in all relevant tech outlets. Too many to name here.&lt;/p&gt;

&lt;p&gt;If you’re hesitant to open the codebase for the entire world at one go, you can start with a “Developer preview” - a process where you screen all the people that want to contribute to your code by letting a small amount of them onto the repository and seeing how they react. Stay in touch with your first contributors and make sure that you attend to their needs and suggestions. Give out your product or company swag to your first contributors and make them feel welcome at the earliest stages - even if it’s a developer preview.&lt;/p&gt;

&lt;h2&gt;
  
  
  Refine and repeat
&lt;/h2&gt;

&lt;p&gt;Once you get your first codebase running on open source, you can simply repeat the process with other repos and flood the world with even more open-source code.&lt;/p&gt;

&lt;p&gt;I hope that someone searching for “How and why should I open source my codebase” will find this article helpful and land their next job at helpful enough that they will use it to land a job at (insert your dream company name here) or make a clear step-by-step plan of what has to be done on their current job involving open source.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>community</category>
    </item>
    <item>
      <title>CLI tools for noobs and non-devs - improve your shell experience, promptly.</title>
      <dc:creator>Wojtek Cichoń</dc:creator>
      <pubDate>Tue, 03 Mar 2020 23:10:26 +0000</pubDate>
      <link>https://dev.to/wojtekidd/cli-tools-for-noobs-and-non-devs-improve-your-shell-experience-promptly-1500</link>
      <guid>https://dev.to/wojtekidd/cli-tools-for-noobs-and-non-devs-improve-your-shell-experience-promptly-1500</guid>
      <description>&lt;p&gt;I noticed that people learning to code and non-developers have generally a hard time approaching their operating systems’ shells. No wonder - we’ve got so accustomed to graphic user interfaces that asking your operating system to do things by writing some abstract commands feels pretty awkward to most of us.&lt;/p&gt;

&lt;p&gt;When starting to code, or working with software developers sooner than later you’ll have to bang your head against the keyboard, press enter and see what happens. &lt;/p&gt;

&lt;p&gt;I want to show you some cool CLI tools I found that will enable you to get accustomed to using your shell and enjoying it!&lt;/p&gt;

&lt;h2&gt;
  
  
  Shell 101
&lt;/h2&gt;

&lt;p&gt;First things first.&lt;/p&gt;

&lt;p&gt;"In computing, a &lt;strong&gt;shell&lt;/strong&gt; is a user interface for access to an &lt;strong&gt;operating system&lt;/strong&gt;'s services. In general, &lt;strong&gt;operating system shells&lt;/strong&gt; use either a command-line interface (CLI) or graphical user interface (GUI), depending on a computer's role and particular operation. A &lt;strong&gt;command-line interface&lt;/strong&gt; (&lt;strong&gt;CLI&lt;/strong&gt;) is a text-based user interface (UI) used to view and manage computer files."&lt;/p&gt;

&lt;p&gt;My first contact with Linux shell came about the year 2000. Back then, I was what people now call a script kiddie - subscribing Bugtraq, installing Red Hat on Friday nights, tweaking Enlightenment, learning HTML with C++ and thinking how I can put these two together.&lt;/p&gt;

&lt;p&gt;I’ve got introduced to CLI in high school and since then I feel paranoid when I’m not able to access shell on my laptop or workstation.&lt;/p&gt;

&lt;h2&gt;
  
  
  CLI tools I find useful
&lt;/h2&gt;

&lt;p&gt;Here are some CLI tools that make working with shell less hell.  &lt;/p&gt;

&lt;h3&gt;
  
  
  fish
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://fishshell.com/" rel="noopener noreferrer"&gt;Fish&lt;/a&gt; stands for &lt;strong&gt;f&lt;/strong&gt;riendly &lt;strong&gt;i&lt;/strong&gt;nteractive &lt;strong&gt;sh&lt;/strong&gt;ell. It’s full of colors, helpful autosuggestions and works across all platforms (macOS, Linux, Windows).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; with fish things might get a bit out of hand when you want to set up your programming environment. I had to google things and work it out when it came to managing the &lt;code&gt;PATH&lt;/code&gt; variable on some occasions (&lt;a href="https://angristan.xyz/2018/07/how-to-use-nvm-rbenv-pyenv-goenv-with-fish-shell/" rel="noopener noreferrer"&gt;here’s a post that saved my life when it came to setting up programming version managers in fish&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;Anyway, fish is “smart and user-friendly” and I would highly recommend it to all you CLI n00bs!&lt;/p&gt;

&lt;h3&gt;
  
  
  bash-git-prompt
&lt;/h3&gt;

&lt;p&gt;This &lt;a href="[https://github.com/magicmonty/bash-git-prompt"&gt;“informative and fancy bash prompt for Git users”&lt;/a&gt; is something I wouldn’t be able to live without right now. If you’re working a lot with &lt;a href="https://en.wikipedia.org/wiki/Git" rel="noopener noreferrer"&gt;Git version-control system&lt;/a&gt; then this is a must-have.&lt;/p&gt;

&lt;p&gt;Thanks to this little addition to my shell I know exactly what’s my current directories’ &lt;code&gt;git status&lt;/code&gt; without having to execute this command every single time I push/pull/commit/add changes to my local repo.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/magicmonty/bash-git-prompt#install-for-the-fish-shell" rel="noopener noreferrer"&gt;Works great with fish&lt;/a&gt; 👍&lt;/p&gt;

&lt;h3&gt;
  
  
  The Fuck
&lt;/h3&gt;

&lt;p&gt;Yes - that’s the name of the next CLI tool which I find very helpful. Described as a &lt;a href="https://github.com/nvbn/thefuck" rel="noopener noreferrer"&gt;“magnificent app which corrects your previous console command”&lt;/a&gt; it does exactly that.  &lt;/p&gt;

&lt;p&gt;With this app, swearing gives you twice the relief 😉&lt;/p&gt;

&lt;h3&gt;
  
  
  howdoi
&lt;/h3&gt;

&lt;p&gt;I use this one less, but it’s sometimes very helpful on CLI-only systems where you can’t use a GUI web browser (remember that there are text-mode web browsers like &lt;a href="https://lynx.browser.org/" rel="noopener noreferrer"&gt;Lynx&lt;/a&gt; that  work perfectly fine 👌🏻). &lt;a href="https://github.com/gleitz/howdoi" rel="noopener noreferrer"&gt;Howdoi&lt;/a&gt; provides short programming-related snippets when you’re lost or you’re just looking for a quick hack.&lt;/p&gt;

&lt;h3&gt;
  
  
  fkill
&lt;/h3&gt;

&lt;p&gt;When using CLI you’re able to view all the processes that your computer is currently running by using a &lt;code&gt;ps&lt;/code&gt; command. There are moments when you want to kill a process or two to unfreeze your machine. What &lt;a href="https://github.com/sindresorhus/fkill-cli" rel="noopener noreferrer"&gt;fkill&lt;/a&gt; does is support you with a nice CLI interface to do that instead of making you &lt;code&gt;grep&lt;/code&gt; through a list of processes and &lt;code&gt;kill&lt;/code&gt; them one by one.&lt;/p&gt;

&lt;h2&gt;
  
  
  Let’s be &lt;code&gt;less&lt;/code&gt; afraid, shell we?
&lt;/h2&gt;

&lt;p&gt;I hope these tools will make your CLI experience less cumbersome and invite you to use shell a bit more often. For more great CLI tools you can always &lt;a href="https://github.com/agarrharr/awesome-cli-apps" rel="noopener noreferrer"&gt;check out this awesome CLI apps list on GitHub&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;Next thing you know, you’ll be contributing to the ‘GUI vs CLI’ discourse on Twitter 😜&lt;/p&gt;

</description>
      <category>cli</category>
      <category>shell</category>
      <category>beginners</category>
      <category>linux</category>
    </item>
  </channel>
</rss>
