<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[Keivan Beigi]]></title><description><![CDATA[Open Source Developer, Head of Technology at MottoWealth, Founder of AppGet, Sonarr.]]></description><link>https://keivan.io/</link><image><url>https://keivan.io/favicon.png</url><title>Keivan Beigi</title><link>https://keivan.io/</link></image><generator>Ghost 3.16</generator><lastBuildDate>Thu, 27 Feb 2025 19:13:06 GMT</lastBuildDate><atom:link href="https://keivan.io/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[The Day AppGet Died.]]></title><description><![CDATA[The story of how Microsoft embraced and then killed AppGet.]]></description><link>https://keivan.io/the-day-appget-died/</link><guid isPermaLink="false">5ec8c6cbd003210001268965</guid><category><![CDATA[appget]]></category><category><![CDATA[microsoft]]></category><category><![CDATA[winget]]></category><category><![CDATA[windows]]></category><category><![CDATA[package-manager]]></category><dc:creator><![CDATA[Keivan Beigi]]></dc:creator><pubDate>Mon, 25 May 2020 06:49:00 GMT</pubDate><media:content url="https://keivan.io/content/images/2020/05/diego-ph--xa9XSA7K9k-unsplash-2.jpg" medium="image"/><content:encoded><![CDATA[<figure class="kg-card kg-image-card kg-width-full"><img src="https://keivan.io/content/images/2020/05/diego-ph--xa9XSA7K9k-unsplash-3.jpg" class="kg-image" alt="The Day AppGet Died."></figure><h3></h3><img src="https://keivan.io/content/images/2020/05/diego-ph--xa9XSA7K9k-unsplash-2.jpg" alt="The Day AppGet Died."><p>Microsoft released <a href="https://devblogs.microsoft.com/commandline/windows-package-manager-preview/" rel="noopener nofollow">WinGet</a> (<em><em>Not to be mistaken with </em></em><a href="https://appget.net/" rel="noopener nofollow"><em><em>AppGet</em></em></a>) earlier this week as part of their <a href="https://mybuild.microsoft.com/" rel="noopener nofollow">Build 2020</a> announcements. For the past few days, I’ve been collecting my thoughts figuring out what actually happened in the past 12 months.</p><p><strong><strong>TLDR;</strong></strong> <strong><strong>I’m no longer going to be developing AppGet. The client and backend services will go into maintenance mode immediately until August 1st, 2020, at which point they’ll be shut down permanently.</strong></strong></p><p>If you are still interested, here is how AppGet died.</p><p>A year ago (July 3rd<em><em>, 2019</em></em>) I got this email from Andrew, a high-level manager at Microsoft,</p><!--kg-card-begin: markdown--><blockquote>
<p>Keivan,</p>
<p>I run the Windows App Model engineering team and in particular the app deployment team. Just wanted to drop you a quick note to thank you for building appget — it’s a great addition to the Windows ecosystem and makes Windows developers life so much easier. We will likely be up in Vancouver in the coming weeks for meetings with other companies but if you had time we’d love to meet up with you and your team to get feedback on how we can make your life easier building appget.</p>
</blockquote>
<!--kg-card-end: markdown--><p>Naturally, I was excited; my hobby project being noticed by Microsoft was a big deal. I replied, and two months and a few emails later, we finally had a meeting planned on August 20th at Microsoft Vancouver. The meeting was between me, Andrew and another engineering manager in the same product group. I had a great time; we talked about the ideas behind AppGet, <a href="https://devblogs.microsoft.com/commandline/windows-package-manager-preview/" rel="noopener nofollow">what I thought was broken about the current package manager systems in Windows</a> and what I had planned for AppGet’s future. We went out for lunch and talked a bit more about AppGet, Windows Phone, and a few other things, but the outcome of the meeting as far as I understood it was,<em><em> what can Microsoft do to help?</em></em> I mentioned some Azure credit would be nice, getting some doc on how the new MSIX packages work and if they could fix a few issues I had with some of their download links.</p><p>Fast forward to next week (August 28th), and I got this email from Andrew,</p><!--kg-card-begin: markdown--><blockquote>
<p>Keivan,</p>
<p>it was a pleasure to meet you and to find out more about appget. I’m following up on the azure startup pricing for you. As you know we are big fans of package managers on Windows and we are looking to do more in that space. My team is growing and part of that is to build a team who is responsible for ensuring package managers and software distribution on Windows makes a big step forward. We are looking to make some significant changes to the way that we enable software distribution on Windows and there’s a great opportunity (well I would say that wouldn’t I?) to help define the future of Windows and app distribution throughout Azure/Microsoft 365.</p>
<p>With that in mind have you considered spending more time dedicated to appget and potentially at Microsoft?</p>
</blockquote>
<!--kg-card-end: markdown--><p>Initially, I was a bit hesitant; I didn’t want to go to Microsoft to work on Windows Store, MSI engine or some other app deployment-related stuff. Shortly after, I was assured that I would spend all my time on AppGet. After about a month of prolonged email back and forth, we came to the conclusion that the arrangement will be very similar to an acqui-hire; Microsoft would hire me, AppGet would come with me, and they would decide if they wanted to rename it something else, or it would become Microsoft AppGet.</p><p>Throughout the whole process, I was very unclear on what my role would be at Microsoft. What would my responsibilities be? Who would I report to? Who/anyone would report to me? I tried clearing some of these answers throughout those slow conversations but never got a clear answer.</p><p>After another few months of again very slow email conversations, I was told that the acqui-hire process through BizDev would take a very long time. An alternative to speed up the process would be just to hire me with a “<em><em>bonus</em></em>” and then work on migrating the code ownership after the fact. I didn’t have any objections, so we scheduled some meetings/interviews in Redmond.</p><p>I flew to Seattle on December 5th to have a full day of interviews/meetings at Microsoft HQ. I met with four different people; three of the meetings were more like your typical interviews; the meeting with Andrew was more about what we should do once this is all over and how we would migrate AppGet’s process and infrastructure to be able to handle Microsoft’s scale. We talked about some of our options, but in general, I thought everything went well.</p><p>My last meeting ended at around 6 pm. I took an Uber to the airport and was back in Vancouver.</p><h1 id="and-then-i-didn-t-hear-anything-back-from-anyone-at-microsoft-for-six-months-">And then, I didn’t hear anything back from anyone at Microsoft for six months.</h1><p>Until earlier this week when I was given heads up about WinGet’s launch the next day,</p><!--kg-card-begin: markdown--><blockquote>
<p>Hi Keivan, I hope you and your family are doing well — BC seems to have a good handle on covid compared to the us.</p>
<p>I’m sorry that the pm position didn’t work out. I wanted to take the time to tell you how much we appreciated your input and insights. We have been building the windows package manager and the first preview will go live tomorrow at build. We give appget a call out in our blog post too since we believe there will be space for different package managers on windows. You will see our package manager is based on GitHub too but obviously with our own implementation etc. our package manager will be open source too so obviously we would welcome any contribution from you.</p>
<p>I look forward to talking to you about our package manager once we go live tomorrow. Obviously this is confidential until tomorrow morning so please keep this to yourself. You and chocolatey are the only folks we have told about this in advance.</p>
<p>Regards<br>
Andrew</p>
</blockquote>
<!--kg-card-end: markdown--><p>I wasn’t too surprised; I had figured out months ago that the “Microsoft thing” isn’t happening.</p><p>I waited until the next day to see what this new package manager was going to be like. When I finally saw the <a href="https://devblogs.microsoft.com/commandline/windows-package-manager-preview/" rel="noopener nofollow">announcement</a> and the <a href="https://github.com/microsoft/winget-pkgs" rel="noopener nofollow">GitHub repositories</a>, I was shocked? Upset? I wasn’t even sure what I was looking at.</p><p>When I showed it to my friend, the first thing he said was, “They Called it WinGet? are you serious!?” I didn’t even have to explain to him how the core mechanics, terminology, the <a href="https://github.com/appget/appget.packages/blob/master/manifests/vlc/vlc.yaml" rel="noopener nofollow">manifest format</a> and structure, even the package repository’s folder structure, are very <em><em>inspired</em></em> by AppGet.</p><p>Am I upset they didn’t hire me? Not really, after visiting the campus, I wasn’t too sure I wanted to work for such a big company, also moving from Canada to the U.S. wasn’t something I was too excited about. Also, throughout the process, at no time I assumed this was done deal.</p><p>Am I upset that Microsoft, a 1.4 trillion-dollar company, finally got their act together and released a decent package manager for their flagship product? No, they should’ve done it years ago. They shouldn’t have screwed Windows Store as badly as they did.</p><p>Realistically, no matter how hard I tried to promote AppGet, it would never grow at the rate a <em><em>Microsoft </em></em>solution would. I didn’t create AppGet to get rich or to become famous or get hired by Microsoft. I created AppGet because I thought us Windows users deserved a decent app management experience too.</p><p>What bothers me is how the whole thing was handled. The slow and dreadful communication speed. The total radio silence at the end. But the part that hurts the most was the announcement. AppGet, which is objectively where most ideas for WinGet came from, was only mentioned as another package manager <em><em>that just happened to exist;</em></em> While other package managers that WinGet shares very little with were mentioned and explained much more deliberately.</p><p>There is a silver lining. WinGet will be built on a solid foundation and has the potential to succeed. And we neglected Windows users might finally have a decent package manager. —</p><p></p><p><em><em>Live and learn.</em></em></p><p></p><h3 id="edit-to-clarify-some-issues-">Edit to clarify some issues, </h3><p><em>May 27th, 2020 19:04 PST </em></p><p></p><blockquote><em><strong>But AppGet is Open Source</strong></em></blockquote><p>Code being copied isn't an issue. I knew full well what it meant to release something opensource and I don't regret it one bit. What was copied with no credit is the foundation of the project. How it actually works. If I were the patenting type, this would be the thing you would patent. ps. I don't regret not patenting anything.</p><p> And I don't mean the general concept of package/app managers, they have been done a hundred times. If you look at similar projects across OSes, Homebrew, Chocolaty, Scoop, ninite etc; you'll see they all do it in their own way. However, WinGet works pretty much identical to the way AppGet works. </p><p>Do you want to know how Microsoft WinGet works? go read the <a href="https://keivan.io/appget-what-chocolatey-wasnt/">article I wrote 2 years ago about how AppGet works</a>.</p><p>I'm not even upset they copied me. To me, that's a validation of how sound my idea was. What upsets me is how no credit was given.</p><blockquote><strong>You should've followed up.</strong></blockquote><p>I did, There was an issue with my travel reimbursement, So I contacted the HR contact and at the same time asked about the Interviews, She told me someone will get back to me about that and they never did. This was on Feb 14th, 2020.</p>]]></content:encoded></item><item><title><![CDATA[AppGet, What Chocolatey wasn’t]]></title><description><![CDATA[Announcing AppGet. A package manager for Windows.]]></description><link>https://keivan.io/appget-what-chocolatey-wasnt/</link><guid isPermaLink="false">5ecc4022495b630001f2d72c</guid><category><![CDATA[appget]]></category><category><![CDATA[package-manager]]></category><category><![CDATA[windows]]></category><dc:creator><![CDATA[Keivan Beigi]]></dc:creator><pubDate>Thu, 12 Jul 2018 07:00:00 GMT</pubDate><media:content url="https://keivan.io/content/images/2020/05/appget-cityscape-4.jpeg" medium="image"/><content:encoded><![CDATA[<figure class="kg-card kg-image-card kg-width-full"><img src="https://keivan.io/content/images/2020/05/appget-cityscape-2.jpeg" class="kg-image" alt="AppGet, What Chocolatey wasn’t"></figure><img src="https://keivan.io/content/images/2020/05/appget-cityscape-4.jpeg" alt="AppGet, What Chocolatey wasn’t"><p>Four years ago I wrote an article on <a href="https://medium.com/@keivan/why-chocolatey-is-broken-beyond-any-hope-d1a4e33b3d23" rel="noopener">why Chocolatey is broken, and not in a way that could be fixed with a pull-request.</a></p><p>Shortly after that I started working on what I thought would be a good version of what Chocolatey was supposed to be, a proper package manager for Windows applications.</p><figure class="kg-card kg-image-card"><img src="https://keivan.io/content/images/2020/05/image.png" class="kg-image" alt="AppGet, What Chocolatey wasn’t"></figure><p>By the time I got the basics working Chocolatey launched their Kickstarter and raised $52,000. I figured well; Now that Chocolatey is no longer a hobby surely they will fix things enough that there won’t be room to compete. On top of that, add a bunch of personal “things”, a couple of job changes and the GitHub repository ended up collecting dust for about four years.</p><p>I would think of AppGet every once in a while in a <em><em>what it could’ve been</em></em> sort of way. One night in the middle of February 2018 I was having dinner with an old co-worker and AppGet came up again, just talking about it got me fired-up, being fair the whiskeys I’ve been drinking all night might’ve had something to do with it. So the next day, I took out the dusty GitHub repository from the metaphorical back of the drawer and,</p><figure class="kg-card kg-image-card"><img src="https://cdn-images-1.medium.com/max/800/1*OISGa37_KxC0imQRoT-MUg.png" class="kg-image" alt="AppGet, What Chocolatey wasn’t"></figure><h1 id="better-late-than-never-i-guess">Better late than never, I guess</h1><p>I really wish I had kept going four years ago (as a bonus you would’ve been spared reading my ramblings about why it took four years), but anyways, here it is,</p><p>AppGet is my first prototype of what a proper package manager for Windows should look like. Keep in mind this is a pretty early stage, and I am VERY open to suggestions on how to make AppGet better.</p><h1 id="data-over-scripts">Data over Scripts</h1><p>AppGet uses <a href="http://en.wikipedia.org/wiki/YAML" rel="noopener nofollow">YAML</a> files instead of scripts; we call them manifests. Using data over scripts just seemed like a much better choice. Here are some of my reasoning,</p><p>Given data AppGet can provide a standard and predictable behavior across different packages and systems. This allows it to be an effective framework for both users and package authors. The example I brought up in my original article was checking for system requirements. AppGet has built-in support for multiple installers per package; this means each package can have different installers targeting different versions of Windows or CPU architecture.</p><!--kg-card-begin: markdown--><pre><code>- location: http://7-Zip.or/9.20/7z920.msi
- location: http://7-Zip/9.20/7z920-x64.msi  
  architecture: x64
</code></pre>
<!--kg-card-end: markdown--><p><em><em>-Two different installers used for different CPU architectures</em></em></p><p>This allows AppGet to do all the heavy lifting around figuring out which installers are compatible with the target system and picking the best one without requiring complicated package scripts.</p><p>It also allows us to give the user the option of overriding these constraints if they chose to use a common flag. (I haven't actually implemented this feature, but it’s trivial given our architecture)</p><!--kg-card-begin: markdown--><pre><code>C:\&gt; appget install seven-zip -x86
</code></pre>
<!--kg-card-end: markdown--><p>AppGet might have support for scripted packages in the future, however, for now, the plan is focusing efforts on data-driven packages.</p><h1 id="open-source-manifests">Open Source Manifests</h1><p>AppGet doesn't have a concept of a package maintainer. No one owns any of the packages. All manifests are hosted in our official <a href="https://github.com/appget/appget.flightplans" rel="noopener nofollow">GitHub repository</a>. This allows anyone to submit a pull-request to any of the existing packages in the repository or submit a pull-request for a brand new package.</p><p>You can also easily review a manifest before installing it on your machine, to check where the installer comes from, what the application license is or even where the source is hosted.</p><!--kg-card-begin: markdown--><pre><code>C:&gt; appget view atom
</code></pre>
<!--kg-card-end: markdown--><p><em><em>We plan to add support for other package repositories in the future, public and private.</em></em></p><h1 id="what-about-oneget">What about OneGet</h1><p>There really isn't much overlap between OneGet and AppGet. OneGet as it currently stands provides a unified way to get packages from <em><em>other </em></em>package repositories. It has no package repository of its own. Soon AppGet will be one of those package repositories, and you will be able to easily install AppGet packages using OneGet commands.</p><h1 id="what-s-ahead">What’s ahead</h1><p>I have big plans for AppGet, but they take time, here are some of the features I’ve been thinking about,</p><p><strong><strong>Installation Options: </strong></strong>Many installers have support for changing the installation settings using flags passed to the installer. We plan to add first class support for those in our manifests, so you could so something like,</p><!--kg-card-begin: markdown--><pre><code>C:&gt; appget options 7zip -add-context-menu=true|false : Add 7zip commands to context menu
</code></pre>
<!--kg-card-end: markdown--><p>But we can go beyond this, for zip packages that don’t have their own installers we can give you additional <em><em>“value-added”</em></em> options, like adding a shortcut to start menu/startup or pin it to taskbar, associate it with specific extensions or even run the application as a windows service. This way you can install zip packages using AppGet and get more features than you would get even from the installer released by the vendor (ex. if you want the app to start with windows or be pinned to your taskbar automatically)</p><!--kg-card-begin: markdown--><pre><code>C:&gt; appget install pidgin --autostart --pin-taskbar
</code></pre>
<!--kg-card-end: markdown--><h1 id="what-we-have-now"><strong>What we have now</strong></h1><p><strong><strong>Install AppGet:</strong></strong> <a href="https://github.com/appget/appget/releases" rel="noopener nofollow">https://github.com/appget/appget/releases</a></p><p><strong><strong>Checkout Available Packages: </strong></strong><a href="https://github.com/appget/appget.packages/tree/master/manifests" rel="noopener nofollow">https://github.com/appget/appget.packages/tree/master/manifests</a></p><p><strong><strong>Read the Documentation:</strong></strong> <a href="https://docs.appget.net/" rel="noopener nofollow">https://docs.appget.net/</a></p><h1 id="we-would-love-to-hear-from-you">We would love to hear from you</h1><p>We don't want to build AppGet in a silo. Give it try and please let us know what you think. We would love to hear from you. Good or bad.</p><p><strong><strong>Email:</strong></strong> <a href="mailto:hello@appget.net" rel="noopener nofollow">hello@appget.net</a></p><p><strong><strong>GitHub</strong></strong>: <a href="https://github.com/appget" rel="noopener nofollow">https://github.com/appget</a></p>]]></content:encoded></item><item><title><![CDATA[Telegram, Not as Secure as You Might Think]]></title><description><![CDATA[<figure class="kg-card kg-image-card"><img src="https://keivan.io/content/images/2020/05/telegram.jpg" class="kg-image"></figure><p>Most people in my social circle use Telegram, mainly because they think it’s the most secure messaging platform out there. I’m sure the network effect has something to do with its popularity too, and if that’s the case then this article might not be for you. However,</p>]]></description><link>https://keivan.io/telegram-not-as-secure-as-you-might-think/</link><guid isPermaLink="false">5ecc77b0495b630001f2d778</guid><category><![CDATA[telegram]]></category><category><![CDATA[crypto]]></category><category><![CDATA[security]]></category><category><![CDATA[messaging]]></category><dc:creator><![CDATA[Keivan Beigi]]></dc:creator><pubDate>Sat, 17 Jun 2017 02:00:00 GMT</pubDate><media:content url="https://keivan.io/content/images/2020/05/telegram-1.jpg" medium="image"/><content:encoded><![CDATA[<figure class="kg-card kg-image-card"><img src="https://keivan.io/content/images/2020/05/telegram.jpg" class="kg-image" alt="Telegram, Not as Secure as You Might Think"></figure><img src="https://keivan.io/content/images/2020/05/telegram-1.jpg" alt="Telegram, Not as Secure as You Might Think"><p>Most people in my social circle use Telegram, mainly because they think it’s the most secure messaging platform out there. I’m sure the network effect has something to do with its popularity too, and if that’s the case then this article might not be for you. However, if you are using Telegram because it’s secure, you should keep reading.</p><p>When I mention to my friends or family that Telegram might not be as secure as they think I’m frequently countered with:</p><blockquote><em><em>“But I’ve heard that it’s so advanced that ISIS uses it.” — Paraphrasing my sister.</em></em></blockquote><p>First, let’s address the ISIS thing. It might be true that ISIS uses a particular technology — in this case, Telegram — but that isn’t necessarily a good testament to its security. Not because ISIS is evil, but because there is nothing about ISIS that makes them experts in cryptography.<br>Sometimes we assume that people in compromising situations or critical positions are good trendsetters for information security. But let me give you an example; Hillary R. Clinton ran the most expensive campaign in human history while being backed and supported by the most influential and cutting-edge technology companies in the world. Some of these companies are pioneers in security. Meanwhile, her campaign, as well as DNC, still managed to fail at protecting themselves… and in various amusing ways. As such, perhaps we shouldn’t be looking to ISIS for examples of security best practices.</p><p>I’m not going to get into the details of who runs Telegram and why you should or should not trust them. This is primarily because it has been <a href="https://www.washingtonpost.com/news/the-intersect/wp/2015/11/23/the-secret-american-origins-of-telegram-the-encrypted-messaging-app-favored-by-the-islamic-state/" rel="noopener nofollow">well documented</a>, and secondly, it implies a level of personal trust, which shouldn’t matter as much as some people may want you to think. After all, a general principle in information security is “<em><em>Trust no one</em></em>”.</p><p><em><em>To be clear, I’m by no means an expert in cyphers or cryptography. But, I know enough to spot rhetoric and fallacies.</em></em></p><p>Cryptography and encryption at their core aren’t about faith, jurisdictions or laws. It all comes down to math. Very complicated, borderline-magic-math, but still math. And just like when you were in school, you have to show your work or you don’t get any marks. Pavel Durov (founder of Telegram) can say “<em><em>Telegram is secure</em></em>” and the press can blindly quote him until they are both blue in the face, but until he shows his work all we have is his word.</p><p>The biggest red-flag with Telegram isn’t that they don’t show their work; that we have no idea what encryption algorithm they use; whether or not it’s secure; or whether it has any backdoors. The red flag is the fact that they decided to invent their own in-house encryption algorithm. <strong><strong><em><em>Anyone </em></em></strong></strong>in the industry knows (I hope) and will tell you that developing your own encryption isn’t just a bad idea — it’s an irresponsible and dangerous one.</p><hr><p>So what should you be using? This might come as a surprise, but the answer is either Signal, WhatsApp or even Facebook Messenger. Why? Because of all the reasons you shouldn’t be using Telegram as far as security is concerned. They are all based on an open source protocol called “<a href="https://en.wikipedia.org/wiki/Signal_Protocol" rel="noopener nofollow">Signal Protocol</a>” by <a href="https://whispersystems.org/" rel="noopener nofollow">Open Whisper Systems</a>. The protocol is built on top of industry-standard crypto algorithms which have been battle tested for years or even decades, and peer reviewed by some of the smartest people in the world.</p><blockquote><em><em>Use anything by Open Whisper Systems. — Edward Snowden.</em></em></blockquote><p>Telegram’s security is a dubious suggestion. Signal Protocol’s security is as good as we can get in 2017.</p>]]></content:encoded></item><item><title><![CDATA[Why Chocolatey is Broken Beyond Any Hope]]></title><description><![CDATA[<figure class="kg-card kg-image-card kg-width-full"><img src="https://keivan.io/content/images/2020/05/choco-windows.jpeg" class="kg-image"></figure><p>I remember how excited I got when I first heard about Chocolatey. Did we finally get a package manager for Windows, one of the things I always envied about *nix and OS X(Homebrew)? I was really excited; I told my co-workers sitting around me about this amazing new tool</p>]]></description><link>https://keivan.io/why-chocolatey-is-broken/</link><guid isPermaLink="false">5ecc78ef495b630001f2d791</guid><category><![CDATA[appget]]></category><category><![CDATA[package-manager]]></category><category><![CDATA[microsoft]]></category><category><![CDATA[windows]]></category><dc:creator><![CDATA[Keivan Beigi]]></dc:creator><pubDate>Wed, 08 Oct 2014 02:20:00 GMT</pubDate><media:content url="https://keivan.io/content/images/2020/05/choco-windows-1.jpeg" medium="image"/><content:encoded><![CDATA[<figure class="kg-card kg-image-card kg-width-full"><img src="https://keivan.io/content/images/2020/05/choco-windows.jpeg" class="kg-image" alt="Why Chocolatey is Broken Beyond Any Hope"></figure><img src="https://keivan.io/content/images/2020/05/choco-windows-1.jpeg" alt="Why Chocolatey is Broken Beyond Any Hope"><p>I remember how excited I got when I first heard about Chocolatey. Did we finally get a package manager for Windows, one of the things I always envied about *nix and OS X(Homebrew)? I was really excited; I told my co-workers sitting around me about this amazing new tool that would finally make setting up new machines and installing applications as easy as a single command. To my surprise they didn't see how huge this was, but I didn't care. I knew how great this would be.</p><p>Two years later, I have completely given up.</p><h1 id="package-maintenance">Package maintenance</h1><p>Probably the biggest issue with Chocolatey is its package maintenance workflow or lack thereof. The first person that submits a package for an application becomes its maintainer. If I go and create a package for an app that I use and submit it to the Chocolatey Gallery I would become the maintainer of the package regardless of my commitment to keep it up-to-date. I install my app using my newly uploaded package and forget about Chocolatey two weeks later. This happens more than you think. You can see evidence of it in the comment section in the gallery. Users asking the maintainer if the package will ever be updated followed by a reply from a member of the Chocolatey team informing them that most maintainers don’t check the comment section for their packages.</p><p>Now you have a package that hasn't been updated in months. You can go to the usergroup and ask Chocolatey admins to make you a maintainer of a specific package and if they do, you can go and update the package (if you can track down the source for its manifest otherwise you end up recreating the package from scratch). That works until the new maintainer disappears into the sunset and we are back to square one with an outdated package.</p><h1 id="security-is-a-real-issue">Security is a real issue</h1><p>There is no formal review process for packages uploaded to the Chocolatey Gallery. <a href="https://groups.google.com/forum/?fromgroups#!topic/chocolatey/5p8l7WRsh9c" rel="noopener nofollow">Project lead himself admitted that currently they manualy review the packages AFTER they have been published.</a> Given that everything is done in powershell someone could create a package that does real damage; Upload the fake package named as a popular unlisted application and you can cause some major hurt.</p><h1 id="chocolatey-is-not-very-good-at-being-a-framework">Chocolatey is not very good at being a framework</h1><p>Frameworks exist to make common tasks easy. Chocolatey is not very good at being that framework. I've looked at the source of a few very popular Chocolatey packages and they are filled with boilerplate code that does the same things over and over. Things you would expect the framework to do. For example, things like checking Windows version requirements, checking registry keys or directories to see if an app is already installed or if it is already running and they all deal with each one of those situations diffidently. That’s both bad for the user and package maintainer. It’s bad for the user because they get unpredictable results with nonuniform error messages, or even false negatives (did the package maintainer implement the OS check correctly?). It’s bad for package maintainers because they have to do work that should have been done for them by the framework.</p><h1 id="it-s-open-source-just-fix-it">It’s open source, just fix it</h1><p>Naturally my first reaction would be to fix the issues and do a pull request. But the biggest issue is package maintenance and that’s more of a process/policy/workflow issue. It is something that can’t be fixed in a pull request. It’s something that has been brought up multiple times in the usergroup and every-time dismissed by the founder.</p><blockquote><em><em>“Some tools you don’t want the latest and greatest. Vagrant is a fantastic case of this. When a new version comes out, it’s not a tool you want to immediately upgrade as you need to wait for your plugins to get updated first.”</em></em></blockquote><blockquote><em><em>— Rob Reynolds</em></em></blockquote><p>I don’t really think this is package manager’s place to tell me what version of software I would want and not even through a predefined delayed deployment process but as a side effect of poor packages maintenance.</p><blockquote><em><em>“Is there value in having *a version* of a piece of software, even if it is not the latest and greatest? Aside from security fixes (you always want the latest security fixes), I think there is some value in getting software to your machine. I guess the point I’m trying to make is, what did you do before to make sure you were always on the latest and greatest of every tool/software on your box ALL THE TIME? Run a tool and then manually update all of them? Or use some sort of automation to do so? And two months after rebuilding your machine, were you always up to date on everything?”</em></em></blockquote><blockquote><em><em><em>— Rob Reynolds</em></em></em></blockquote><p>“It’s not worse than before but it’s not that much better either” That’s not a very good value proposition for your solution.</p><h1 id="is-there-no-hope-for-windows">Is there no hope for Windows?</h1><p>I don’t know. But one thing I know for certain now, Chocolatey is not the answer. I’m still trying to figure out how we could fix all of these problems.</p><p>The package maintenance issues could easily be solved by following what <a href="http://brew.sh/" rel="noopener nofollow">Homebrew</a> did. Just using <a href="https://github.com/Homebrew/homebrew/tree/master/Library/Formula" rel="noopener nofollow">github</a> and <a href="https://github.com/Homebrew/homebrew/pulls" rel="noopener nofollow">pull request</a> to the official package repository. That way anyone can submit a new or updated package using a simple pull request. It would be a known and simple workflow. That might even solve some of the framework and security problems too since it adds a level of curation to the process where the core team could provide feedback and suggestions on how to improve the package definitions.</p><p>Another idea is to create a packaging system that is 90% of the time driven by data and no code. Let the framework and the user decide how to act on that data. Why do I have to write a script to check the version of Windows if the manifest could provide the minimum system requirements and the framework could do the checks and the user could override it with a common flag.</p><p>I’m hoping to find some free time to actually play around with some of these ideas. I really think it’s time for us Windows users to have a proper package manager — something we can trust, something we've built and can improve together.</p>]]></content:encoded></item></channel></rss>