<?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: David Przybilla</title>
    <description>The latest articles on DEV Community by David Przybilla (@dav009).</description>
    <link>https://dev.to/dav009</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%2F598327%2F2b3fa44e-9f23-47d5-b01c-709cd6a4bd8d.jpeg</url>
      <title>DEV Community: David Przybilla</title>
      <link>https://dev.to/dav009</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/dav009"/>
    <language>en</language>
    <item>
      <title>Reproducibility with Nix : A Beginners guide</title>
      <dc:creator>David Przybilla</dc:creator>
      <pubDate>Sun, 24 Sep 2023 01:47:57 +0000</pubDate>
      <link>https://dev.to/dav009/reproducibility-with-nix-a-beginners-guide-14np</link>
      <guid>https://dev.to/dav009/reproducibility-with-nix-a-beginners-guide-14np</guid>
      <description>&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/PvRhjhzZ8iM"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Nix package manager is a powerful tool to ensure reproducibility in Software projects. Nix can help us set local dev environments, it can also unify all the dependencies in local envs, CI and container images.&lt;/p&gt;

&lt;p&gt;In this talk I go through:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Why is reproducibility an issue in Software Engineering&lt;/li&gt;
&lt;li&gt;How Nix addresses existing problems&lt;/li&gt;
&lt;li&gt;The basics of the Nix package manager and the Nix Store&lt;/li&gt;
&lt;li&gt;Derivations&lt;/li&gt;
&lt;li&gt;The basics of the Nix language&lt;/li&gt;
&lt;li&gt;Nix flakes&lt;/li&gt;
&lt;li&gt;Example project unifying CI/local env/ Container building using Nix Flakes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Slides and Code samples:&lt;br&gt;
&lt;a href="https://github.com/dav009/nixtalk"&gt;https://github.com/dav009/nixtalk&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Example project :&lt;br&gt;
&lt;a href="https://github.com/dav009/nixsample"&gt;https://github.com/dav009/nixsample&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Flyte and Kubeflow</title>
      <dc:creator>David Przybilla</dc:creator>
      <pubDate>Wed, 11 Jan 2023 21:27:34 +0000</pubDate>
      <link>https://dev.to/dav009/flyte-and-kubeflow-4e6m</link>
      <guid>https://dev.to/dav009/flyte-and-kubeflow-4e6m</guid>
      <description>&lt;p&gt;With this entry I want to give you insights on the following questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Problems with the existing orchestration frameworks&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;How are Kubeflow and Flyte different?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Why is Flyte a tool you might want to study?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Why is it different from existing alternatives?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Is Flyte getting traction?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;How difficult is to get started ?&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Context: The Machine learning toolbox
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Orchestration Frameworks Reality
&lt;/h3&gt;

&lt;p&gt;Defining sequence of steps that are: idempotent, resilient and cacheable, but most importantly &lt;strong&gt;reproducible&lt;/strong&gt; is a huge part of the ML stack.&lt;/p&gt;

&lt;p&gt;There are a lot of tools out there. Picking one is difficult. As always there is no silver bullet. It depends on the size of your team, your existing infrastructure and the scale of your problems.&lt;/p&gt;

&lt;p&gt;For small ML/DS teams, this usually means taking the tradeoff between:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Option 1&lt;/strong&gt;: Having a simple orchestration tool with the downside of low scalability, difficulty of provisioning infrastructure, difficulty gluing different services/tools together. Tools like Kedro sit here, they are good for data analysis and Dataframe manipulations. Teams can easily extend Kedro because it is python which most ML practitioners know very well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Option 2&lt;/strong&gt;: Having a tool that allow for better scalability, easier infrastructure provision with the overhead of &lt;strong&gt;&lt;em&gt;&lt;em&gt;A LOT&lt;/em&gt; of complexity&lt;/em&gt;&lt;/strong&gt;. This means a team has to run and manage. a Kubernetes Cluster. On top of that the team has to understand a complex orchestration tool like Kubeflow. Kubeflow works as a Kubernetes operator. Kubernetes operators are usually written in Golang. Any extension or problem that the team faces requires a lot of K8s understanding most likely written in a not very familiar Golang stack for DS/ML engineers.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I want to point out that in both of these options ML practitioners are severely exposed to Infrastructure:&lt;/p&gt;

&lt;p&gt;In &lt;strong&gt;Option1&lt;/strong&gt;, ML practitioners will feel in a strong jacket dependent on some team to provide the needed infrastructure. They might be required to learn/manage the infrastructure themselves. I think we can agree that the ML space is already complicated. These kind of setups ask for someone to be good at setting up: security, permissions, infrastructure, manage k8s. And still be up to date as far as ML papers and models.&lt;/p&gt;

&lt;p&gt;Another side effect is that projects that fall off the cookie cutter pattern (i.e: a recommender systems) might end up with two pipeline codebases: one for training the model and a different one for serving the model. This is a bomb in terms of bugs and consistency&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--0SfiA-C_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/3568/1%2A_TXYawGsvGars0dG9xM7nw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0SfiA-C_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/3568/1%2A_TXYawGsvGars0dG9xM7nw.png" alt="" width="880" height="725"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In &lt;strong&gt;Option2&lt;/strong&gt;. If we consider Kubeflow we start seeing some interesting phenomena. A fine line starts to divide those provisioning infrastructure and the ML practitioners building pipelines for their experiments.&lt;/p&gt;

&lt;p&gt;This is good, as we can think of Kubeflow as a platform as a service for ML practitioners. However, here is the catch: Kubeflow pipelines are very near to Infrastructure definitions. If you have coded a Kubeflow pipeline you will be aware that it is mostly a DSL for defining Pods.&lt;/p&gt;

&lt;p&gt;ML practitioners exposed to Kubeflow can certainly provision the infrastructure they need easier, but &lt;strong&gt;they are still exposed to radioactive levels of Kubernetes details.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--N8rETL_B--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/3436/1%2Au-gJr-oGD_NukLmlqZ6uSQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--N8rETL_B--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/3436/1%2Au-gJr-oGD_NukLmlqZ6uSQ.png" alt="" width="880" height="856"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Kubeflow issues
&lt;/h3&gt;

&lt;p&gt;Kubeflow is a fantastic tool that addressed a missing Lego piece in the ecosystem when it first emerged. However let me rant with the things that reaaaally bother me about Kubeflow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Kubeflow is hard to run locally.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;First time I touched Kubeflow, I had to manually patch yaml files to get it running on my cloud Kubernetes cluster. I was scared to even pitched this to my team. A small team of ML Engineers&lt;/li&gt;
&lt;li&gt;Kubeflow pipelines are basically “passing strings to container’s entrypoints”. In kubeflow case: these strings are paths to cloud files (i.e: s3://mydata/myfile.csv). These paths get feed into pipeline steps (containers) which are in turn container Entrypoints.&lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Thats precisely the problem, Kubeflow DaGs carry no type knowledge about the entrypoint and their schema. Everything is a string. Most of these steps are containers that live in another repo, a tiny refactor in how an entrypoint looks like (maybe a bash file changed) and your pipeline is suddenly broken&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Llqrm6aP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/5232/1%2A_Dos_ycminTGQuqR47j_WA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Llqrm6aP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/5232/1%2A_Dos_ycminTGQuqR47j_WA.png" alt="" width="880" height="452"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A Step in a Kubeflow pipeline (a container) needs to know how to transform data. Because Kubeflow just passes paths as strings. This means that your containers need to know :&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;How to read this file from whatever cloud (maybe local mounted volume)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;How to load this file into whatever representation it is used as in the actual task. For example (see pipeline below), this means knowing how to transform parquet files to dataframes back and forth, consistently, in multiple places:&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;Kubeflow’s DSL is intended to define Pods. It sits too near K8s that ML practitioners need to know many K8s details when writing their tasks&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---ijNFkmx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/4184/1%2AU9gw-vgSoTEu56bHVpBdKw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---ijNFkmx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/4184/1%2AU9gw-vgSoTEu56bHVpBdKw.png" alt="" width="880" height="527"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Kubeflow tries to be a lot of things and have integrations with many projects, a lot of the integrations feel rather brittle. When I tried to play with Seldon and Kubeflow I felt scared of shipping something to production.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Many more details and fears regarding Kubeflow are condensed under this blog post &lt;a href="https://medium.com/mlops-community/is-kubeflow-dead-d82aadba14c0"&gt;“Is Kubeflow dead?”&lt;/a&gt; [3]&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Flyte ( &lt;a href="https://flyte.org/"&gt;https://flyte.org/&lt;/a&gt; )
&lt;/h3&gt;

&lt;p&gt;So Flyte is a tool that at first sight might look very similar to kubeflow. You define pipelines, each step of the pipeline is a container/pod. However it’s scope is very different.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Flyte abstracts away the infrastructure for ML practitioners. You can still define your pipelines as an extended DSL for describing Pods. But Flyte provides and encourages different primitives that abstract k8s resources from the ML practitioners.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Typesafety.&lt;/strong&gt; Even though flyte still runs one container per pipeline step you can get typesafety. Flyte adds types so that you get early failures if your tasks types do not compose.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Plumbing.&lt;/strong&gt; Remember how in Kubeflow you had to transform your parquet into a Dataframe?. In Flyte lots of common types are already supported, you don’t need to specify how to load a Dataframe.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If your previous task outputs a Dataframe and your current task has as an input a Dataframe, then all the plumbing for these serialisations and deserialisations is done for you in the background.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--fXaGoQIg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/4868/1%2AGfUsk6lSwMQNtZN5WvV3pw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fXaGoQIg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/4868/1%2AGfUsk6lSwMQNtZN5WvV3pw.png" alt="" width="880" height="503"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Running a Flyte cluster locally is super easy. With a single command: flytectl sandbox start&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;When I tried Flyte for the first time I got a very good impression. I could easily run my pipelines locally (without a cluster), but also setting up a local cluster was super easy.&lt;/p&gt;

&lt;p&gt;All of these being said: Flyte is a complex tool. Small teams still need to setup K8S, manage a cluster, manage security, integrate plugins..etc.&lt;/p&gt;

&lt;p&gt;Flyte provides a lot of integrations with other tools just like Kubeflow does. That being said not as many as what Kubeflow offers (at least at the time of publishing this Blog entry). However integrations in Flyte do not feel as brittle as the Kubeflow ones.&lt;/p&gt;

&lt;p&gt;One of the main reasons is that Flyte was an internal tool built by Flyte, and by the time it got open sourced it was already battle tested.&lt;/p&gt;

&lt;p&gt;Personally, as I got really excited I went to take a look at flyte codebase. Flyte codebase is really interesting. The engineer in me believes that Flyte might be a point of integration of many tooling in the future, this is because the foundational layers make it easy to test integrations and get early failures.&lt;/p&gt;

&lt;h3&gt;
  
  
  Kubeflow is backed by Google
&lt;/h3&gt;

&lt;p&gt;Indeed Kubeflow is backed by google. Big companies like canonical are offering services like “Charmed Kubeflow” (a managed kubeflow).&lt;/p&gt;

&lt;p&gt;Flyte however does not fall behind. Lyft, Spotify [4], Gojek [5], Toyota [6]and others are using or switching to Flyte. This should give you enough confidence that the project wont just disappear.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;But my team is small, this is still very complex..&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I agree it is complex. The creators of Flyte gathered and started &lt;a href="https://www.union.ai/"&gt;union.ai&lt;/a&gt; [2]. UnionAi is a startup, it is not clear to me what their product is yet, but it seems it is some sort of service on top of Flyte making the setup and maintenance much less complicated [1].&lt;/p&gt;

&lt;p&gt;Union.ai might become an interesting player for Small teams. Why? Because this might abstract complex infrastructure gluing from ML practitioners. With “Charmed Kubeflow” practitioners are exposed to an API that looks like a DSL for defining Pods. Flyte takes that level away, and I suspect union.ai might remove the complicated parts of a Flyte.&lt;/p&gt;

&lt;h3&gt;
  
  
  Final thoughts
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;It might be worth to keep an eye on Flyte and see how its ecosystem evolves. Right now Kubeflow has many integrations and that is its strong point&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I think putting Kubeflow and Flyte in the same category is a mistake.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Flyte builds new primitives that abstract infrastructure and plumbing for ML practitioners. This is key for empowering ML teams.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;If you are curious about Flyte, you can have a taste in a few minutes by following the &lt;a href="https://docs.flyte.org/en/latest/getting_started/index.html"&gt;getting started section at Flyte’s website&lt;/a&gt; [7]&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;[1] UnionML Introduction video &lt;br&gt;
&lt;a href="https://www.youtube.com/watch?v=GTPKc1_QSXo"&gt;https://www.youtube.com/watch?v=GTPKc1_QSXo&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[2] &lt;a href="https://www.union.ai/"&gt;https://www.union.ai/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[3] &lt;a href="https://medium.com/mlops-community/is-kubeflow-dead-d82aadba14c0"&gt;https://medium.com/mlops-community/is-kubeflow-dead-d82aadba14c0&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[4] “Why We Switched Our Data Orchestration Service” &lt;a href="https://engineering.atspotify.com/2022/03/why-we-switched-our-data-orchestration-service/"&gt;https://engineering.atspotify.com/2022/03/why-we-switched-our-data-orchestration-service/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[5] “Adopting Flyte at Gojek” &lt;a href="https://www.youtube.com/watch?v=G1ZFeLewUOA"&gt;https://www.youtube.com/watch?v=G1ZFeLewUOA&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[6] Woven Planet’s Autonomous Vehicle — Data Processing &amp;amp; MLOps at Scale With Flyte &lt;a href="https://www.youtube.com/watch?v=OVLZ6-uR_so"&gt;https://www.youtube.com/watch?v=OVLZ6-uR_so&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[7] Flyte’s getting started &lt;a href="https://docs.flyte.org/en/latest/getting_started/index.html"&gt;https://docs.flyte.org/en/latest/getting_started/index.html&lt;/a&gt;&lt;/p&gt;

</description>
      <category>mlops</category>
      <category>kubernetes</category>
      <category>datascience</category>
      <category>operations</category>
    </item>
    <item>
      <title>The Dangers of GitHub and the Importance of Code Collaboration as a Protocol: Radicle</title>
      <dc:creator>David Przybilla</dc:creator>
      <pubDate>Tue, 10 Jan 2023 00:28:13 +0000</pubDate>
      <link>https://dev.to/dav009/the-dangers-of-github-and-the-importance-of-code-collaboration-as-a-protocol-radicle-bo0</link>
      <guid>https://dev.to/dav009/the-dangers-of-github-and-the-importance-of-code-collaboration-as-a-protocol-radicle-bo0</guid>
      <description>&lt;h2&gt;
  
  
  The Dangers of GitHub and the Importance of Code Collaboration as a Protocol: Radicle
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--hZUMV8OW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/1%2ADHVZN7hQwFcti8ziu5TUdA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--hZUMV8OW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/1%2ADHVZN7hQwFcti8ziu5TUdA.png" alt="" width="600" height="46"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In today’s ever growing hostile world, code collaboration platforms like GitHub and Gitlab are a potential hazard. In this Article I want to make the case why we need “Code collaboration as a protocol” and why it would address potential issues as well as improving Developer Experience.&lt;/p&gt;

&lt;p&gt;By the end of this post I hope to answer the following questions :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;What are the current issues with Github/Gitlab ?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What benefits would a protocol for Code collaboration give to Software developers and OSS?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is Radicle? How does Radicle fit in this Story?&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What is wrong with Github/Gitlab/etc ?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🔭 Scope
&lt;/h3&gt;

&lt;p&gt;GitHub and Gitlab are important tools that help us collaborate on code. Built on top of the Git protocol they let us share code and useful metadata: project issues, community discussions, user profiles, and project history.&lt;/p&gt;

&lt;p&gt;Git helps us share and track changes to code, while code hosting platforms provide a way for us to interact as a community, managing things like our online identity and project visibility.&lt;/p&gt;

&lt;h2&gt;
  
  
  The issues
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🚫 &lt;strong&gt;Arbitrary access&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;In the last years we have been experiencing an increasingly hostile and politicised environment for sharing ideas and this has been extended to collaboration tools like Github/Gitlab which have to abide to local legislation.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;🚫 &lt;strong&gt;Banning individuals from particular countries/nationalities:&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://techcrunch.com/2019/07/29/github-ban-sanctioned-countries/"&gt;GitHub confirms it has blocked developers in Iran, Syria and Crimea&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As the world is taking a turn towards conflictive geopolitics , it is worth asking whether you yourself might might be an innocent casualty:&lt;/p&gt;

&lt;blockquote&gt;
&lt;h1&gt;
  
  
  Q: What if my country of birth makes a bad decision that I can’t control, but then I face sanctions just because I was born there?
&lt;/h1&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;2. **❌ **Removing specific projects (on legal grounds):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.engadget.com/github-youtube-downloaders-riaa-223558038.html"&gt;GitHub takes down YouTube video download tools after an RIAA notice&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://cryptobriefing.com/circle-github-comply-with-tornado-cash-sanctions/"&gt;Circle, GitHub Comply With Tornado Cash Sanctions&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;h1&gt;
  
  
  Q: What if the project I am working on suddenly becomes unpopular or controversial?
&lt;/h1&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;🔐 &lt;strong&gt;Limiting&lt;/strong&gt; &lt;strong&gt;freedoms to run, copy or extend a piece of software? (GNU philosophy)&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://techcrunch.com/2022/12/21/kickstarter-shut-down-the-campaign-for-ai-porn-group-unstable-diffusion-amid-changing-guidelines/"&gt;Kickstarter shut down the campaign for AI porn group Unstable Diffusion amid changing guidelines&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I picked an extreme and controversial example, but you get the gist.&lt;/p&gt;

&lt;h3&gt;
  
  
  🆔 Identity
&lt;/h3&gt;

&lt;p&gt;My GitHub profile is a combination of my identity and portfolio. It showcases my contributions and interests. It’s important to me personally and also serves as a tool when I’m searching for a new job or when potential employers are looking for me.&lt;/p&gt;

&lt;p&gt;As we currently stand our user profiles could be deleted at any time. We deal with all the classic issues of identity in closed social media platforms: &lt;em&gt;you don’t own it.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;An interesting point is that not many people sign their commits on Github or Gitlab. Signing commits is as far as I understand the only way to convey identity via the Git protocol.&lt;/p&gt;

&lt;h3&gt;
  
  
  🏛 ️Lack of Governance for decentralised projects
&lt;/h3&gt;

&lt;p&gt;Github governance goes as far as having roles per project (Admin, contributor). However there is a new class of Software projects: Decentralised projects, Crypto projects, DAOs..&lt;br&gt;
At least in principle these are requiring new tooling for Governance.&lt;br&gt;
Under the Github/Gitlab principles there is no space for these new emerging needs for Governance.&lt;/p&gt;

&lt;p&gt;An Open protocol would allow anyone to implement whatever governance mechanisms they need to operate&lt;/p&gt;

&lt;h2&gt;
  
  
  Code collaboration as a Protocol
&lt;/h2&gt;

&lt;p&gt;If we think of code collaboration as a protocol rather than a platform, anyone can both access and create data that follows that protocol. This means that repositories, code, issues, users, and comments would all be open and organized in a similar way to how we manage code repositories.&lt;/p&gt;

&lt;p&gt;Anybody would be able to implement a custom client if need be, or even extend the protocol to include new data. Anybody would be able to provide a specific implementation of the protocol.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Radicle&lt;/em&gt;&lt;/strong&gt; is such a protocol implementation&lt;/p&gt;

&lt;h2&gt;
  
  
  🌱 Radicle
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://radicle.xyz/"&gt;https://radicle.xyz/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Radicle is an Open source code collaboration Protocol. It keeps git at the core, but it builds the GitHub/Gitlab parts as a protocol. Issues, project discovery, governance , project funding all of these are part of the protocol .&lt;/p&gt;

&lt;blockquote&gt;
&lt;h1&gt;
  
  
  Please bare in mind that in this article I am trying to explain why Radicle is relevant and not the technical minutia of how it operates.
&lt;/h1&gt;
&lt;/blockquote&gt;

&lt;p&gt;Data in Radicle is stored and distributed via P2P using a protocol that is being implemented called &lt;a href="https://github.com/radicle-dev/rips/blob/master/0001-heartwood.md"&gt;heartwood&lt;/a&gt; . You can currently use Radicle even though heartwood is in development.&lt;/p&gt;

&lt;p&gt;What does Radicle entails?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Repositories can’t be censored&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;OSS protocol and clients to access protocol data&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Git workflow is kept identical.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Repositories come with extra data : Issues, PRs..&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;OSS funding via crypto rails&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🪪 Identity
&lt;/h2&gt;

&lt;p&gt;Radicle comes battery ready when it comes to identity. &lt;br&gt;
You can’t use Radicle without having a private key first. By default this means your git commits are signed: **Your identity is your private+public key. **Everything (Issues, commits, comments, patches ) under Radicle is signed using your identity (Keys).&lt;/p&gt;

&lt;p&gt;Radicle also allows you to connect your identity with an ENS (Ethereum Name Service) domain. Because the data running under the protocol is open, it opens up a lot of possibilities. For example, cryptocurrency projects could use your ENS and contributions to improve your credit score or make you eligible for open-source software donations.&lt;/p&gt;

&lt;h3&gt;
  
  
  ❌ Github/Gitlab: A story of Bad defaults for identity
&lt;/h3&gt;

&lt;p&gt;Git was designed to be a decentralized protocol, which means that there is no aspect of the protocol that verifies a user’s identity against a database of users. One way to prove that you are who you claim to be is by signing commits using a private key. This means that you use your private key to add a digital signature to your commits.&lt;/p&gt;

&lt;p&gt;On platforms like GitHub signing your commits is an option and not the default, I believe this is a bad default.&lt;/p&gt;

&lt;h2&gt;
  
  
  🛠️ Tooling: An Open Ecosystem
&lt;/h2&gt;

&lt;p&gt;As radicle is a protocol and not a platform, anybody is able to write clients or integrations to leverage the data within the protocol.&lt;/p&gt;

&lt;p&gt;You don’t like the current client displaying issues or diffs for PRs? &lt;br&gt;
you could fork your existing client and make it your own&lt;/p&gt;

&lt;p&gt;Github/Gitlab are closed ecosystems, we rely heavily on whatever is on their roadmap.&lt;/p&gt;

&lt;p&gt;With an open protocol, we as a community would have the ability to move in the direction we want, rather than being dependent on corporate roadmaps. This could give rise to new companies that focus on creating the best tools, rather than having just a few giant companies monopolizing network effects and wealth.&lt;/p&gt;

&lt;h2&gt;
  
  
  💰 OSS Funding
&lt;/h2&gt;

&lt;p&gt;I think that Radicle could also have a big impact on open-source software funding. I saved this topic for last because I was afraid it might scare off people who are not interested in cryptocurrency. However, Radicle is set up in such a way that it could revolutionize the way we fund open-source software using cryptocurrency.&lt;/p&gt;

&lt;p&gt;Radicle sets the rails for Crypto currency in the protocol:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Having crypto at the core of OSS fundings means it would help avoid cases where Crowdfunding get censored because of Political stances.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;It could introduce new mechanics, for example : issue solving incentives. You want your issue to be resolved sooner? then you can incentivise developers with a bounty.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.drips.network/"&gt;Radicle Drip protocol&lt;/a&gt; is a crypto protocol being built by the Radicle team. It allows people to make donations to a project. It automatically distributes the donations to the contributors in a transparent manner.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;This kind of railing might allow for tighter accountability and maybe new ways for Software developers to find jobs&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🏛 Decentralised Governance models: DAOs
&lt;/h3&gt;

&lt;p&gt;Currently Github repos are managed via Organizations where there are some Admin and contributor Roles. Under a protocol these mechanism could be abstracted and implemented in different ways. One alternative would be to copy Github mechanism and have equivalent Admins/Contributors role.&lt;/p&gt;

&lt;p&gt;Another implementation could provide Governance via a DAO.&lt;br&gt;
Code itself is an asset for an organisation and under a DAO choices made on it could be leveraged via “smart contracts”.&lt;/p&gt;

&lt;p&gt;A few escenarios coming out of my head where DAOs could play a role in governance are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Deciding The roadmap of a product&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Deciding what direction to go when there is a fork on the road&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Radicle itself is governed via a DAO. I know very little about DAOs but I suspect Radicle itself could be implementing a lot of the tools to let DAOs have ownership of Code artefacts.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Lp5c3jeO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/4840/1%2AlQ-PRHaF1vBSD6iCv7Od2Q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Lp5c3jeO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/4840/1%2AlQ-PRHaF1vBSD6iCv7Od2Q.png" alt="Radicle’s landing page as of Dec 2022" width="880" height="545"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ⚡ Is Radicle a Crypto project ?
&lt;/h2&gt;

&lt;p&gt;Radicle might be tagged as a crypto project but I find it confusing to do so.&lt;/p&gt;

&lt;p&gt;Radicle has a coin which uses for the governance of its development: In other words is backed by a DAO.&lt;/p&gt;

&lt;p&gt;The protocol implementation is totally crypto agnostic. &lt;strong&gt;However radicle sets the rails for crypto payments and crypto incentives for OSS&lt;/strong&gt; . Radicle community is obviously crypto friendly and I can imagine there will be a lot of experimentation with crypto technology for OSS incentives.&lt;/p&gt;

&lt;p&gt;The punchline here is : &lt;strong&gt;you can use Radicle and opt out of its crypto features if you want.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🤔 Final thoughts
&lt;/h2&gt;

&lt;p&gt;You can think of Code collaboration as a protocol the same way that you think of Twitter vs Nostr/Mastodon. The Twitter migration have sparkled a lot of development and enthusiasm as Mastodon/Nostr are built on open protocols.&lt;/p&gt;

&lt;p&gt;I did not go into any details on how Radicle works in this article, I wanted to make a case on why it is relevant as of early 2023.&lt;/p&gt;

&lt;h3&gt;
  
  
  My experience using Radicle’s CLI
&lt;/h3&gt;

&lt;p&gt;I tried using Radicle in December 2022 and it was a really interesting experience. I definitely want to continue using it as the Radicle team works on implementing their vision. As a developer, I’m interested in having control over the identity under which I make contributions. I’m also interested in seeing how future software development projects could be funded, and potentially discovering new ways to get hired as a developer.&lt;/p&gt;

&lt;p&gt;As of today Radicle is still in early stages and at best they have created a very promising MVP. If you were to try it at the time that this article is published you would probably find some rough edges. You can think of it as an opportunity to contribute either with your code or ideas.&lt;/p&gt;

&lt;h3&gt;
  
  
  Troublesome Geopolitics..
&lt;/h3&gt;

&lt;p&gt;It’s a common theme in the news and on YouTube, but it really feels like our world is entering a multipolar stage. In this stage, it seems like geopolitical parties don’t trust each other and try to undermine each other. The software community has always been open to anyone based on their contributions, regardless of factors like age, location, nationality, gender, etc. If we want to continue collaborating together, it seems like we might need a code collaboration protocol. Until a few years ago, I thought that GitHub was good enough, but under the current context, I believe that relying too heavily on these tools is a disaster waiting to happen.&lt;/p&gt;

&lt;p&gt;Finally, I wrote this article entirely from a Software Engineering perspective. I am curious about building Software. I know very little about Crypto investments and this blog post is not advising you to buy or sell any type of crypto asset.&lt;/p&gt;

&lt;p&gt;If you want to know more about Radicle:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;FAQ: &lt;a href="https://docs.radicle.xyz/understanding-radicle/faq"&gt;https://docs.radicle.xyz/understanding-radicle/faq&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://radicle.community/"&gt;https://radicle.community/&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://radicle.xyz/"&gt;https://radicle.xyz/&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>github</category>
      <category>git</category>
      <category>web3</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
