{"id":12265,"date":"2016-08-17T13:23:33","date_gmt":"2016-08-17T21:23:33","guid":{"rendered":"https:\/\/blogs.msdn.microsoft.com\/powershell\/?p=12265"},"modified":"2019-02-18T12:38:11","modified_gmt":"2019-02-18T19:38:11","slug":"windows-powershell-is-now-powershell-an-open-source-project-with-linux-support-how-did-we-do-it","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/powershell\/windows-powershell-is-now-powershell-an-open-source-project-with-linux-support-how-did-we-do-it\/","title":{"rendered":"Windows PowerShell is now \u201cPowerShell\u201d: An Open Source Project with Linux support \u2013 How did we do it?"},"content":{"rendered":"<p>Hello everyone,<\/p>\n<p>My name is Angel Calvo, I am Microsoft\u2019s Group Software Engineering Manager for PowerShell and Desired State Configuration (DSC). I&#8217;d like to take this opportunity to proudly represent the engineering team behind this project, and share a few thoughts about <strong>yesterday\u2019s <\/strong><a href=\"https:\/\/aka.ms\/hosoyc\">historic announcement<\/a><strong> for PowerShell and our Community<\/strong><\/p>\n<p><strong>I am so excited about the availability of PowerShell on Linux and as an open source project! \u00a0<\/strong><a href=\"https:\/\/github.com\/PowerShell\/PowerShell\"><strong>https:\/\/GitHub.com\/PowerShell\/PowerShell<\/strong><\/a> <em>&#8212; I can\u2019t think of a better way to celebrate the 10<sup>th<\/sup> year anniversary of PowerShell than by enabling everyone on the planet to help innovate and drive the future of PowerShell together!<\/em><\/p>\n<p>I remember when back in 2014, Jeffrey Snover <em>(Microsof<\/em>t <em>Technical Fellow and PowerShell inventor) <\/em>and I had a discussion about his prediction to open source PowerShell, and the importance of delivering a Linux version. We realized the future of PowerShell would depend on it, and listening to our customers\u2019 and partners\u2019 feedback further confirmed our realization. Based on this evidence, we worked with the PowerShell team to transform our customers\u2019 feedback data, and Jeffrey\u2019s prediction, into a real plan and agreed on the following goals:<\/p>\n<ol>\n<li><em>Enable the Community to directly participate in defining the future direction of PowerShell by Open Sourcing \u201call\u201d Windows PowerShell source code.<\/em><\/li>\n<li><em> <\/em><em>Address the number one ask from our customers and partners by supporting PowerShell on Linux and Mac<\/em> OS<em> X.<\/em><\/li>\n<li><em> <\/em><em>Existing Windows customers and partners shall not experience changes to their scripting experience, quality, support and interop because of our decision to open source PowerShell.<\/em><\/li>\n<li><em> <\/em><em>Learn and adopt DevOps agile approaches to evolve our engineering culture, engineering system, processes and tools.<\/em><\/li>\n<li><em> <\/em><em>Start small and learn by open sourcing portions of PowerShell and DSC as GitHub projects.<\/em><\/li>\n<\/ol>\n<p>There was however, a missing technical piece; a version of .NET working on Linux. Shortly after agreeing on the above goals, we received exciting news: .<em>NET Core will support a number of popular Linux distributions!<\/em> The news opened the door for the Microsoft PowerShell and Enterprise Open Source teams to start the design and prototype phases \u2013 a few months later developers started coding and working in a private GitHub repository.<\/p>\n<p>Microsoft\u2019s culture and leadership also started to shift towards a more open, customer-obsessed company, and Satya Nadella\u2019s famous quote, <em>\u201cMicrosoft loves Linux,\u201d<\/em> encouraged and supported the team in pursuing our vision to open source Windows PowerShell and support Linux \u2013 So we started the journey to deliver our goals!<\/p>\n<p>The PowerShell team recognized that we would need help, and had much to learn, especially from the Linux communities. The team started the journey with the <a href=\"https:\/\/github.com\/PowerShell\/Win32-OpenSSH\">OpenSSH for Windows<\/a> project about a year ago. We worked with the OpenBSD\/OpenSSH communities to deliver this project, and I\u2019d like to take this opportunity to <strong>thank them for their continuous support and advice<\/strong>.<\/p>\n<p>We partnered closely with <strong>Microsoft\u2019s Azure team, <\/strong>as they have made significant investments in PowerShell Cmdlets and DSC resources in the past few years. We worked with them to deliver a set of Cloud heterogeneous cmdlets for Windows and Linux. I highly recommend watching the <a href=\"https:\/\/channel9.msdn.com\/Blogs\/hybrid-it-management\/PowerShell-on-Linux-and-Open-Source\">Azure demo<\/a> by Jeffrey Snover, because it demonstrates PowerShell\u2019s potential to be a great tool to manage <em>anything from anywhere.<\/em><\/p>\n<p>We also worked closely with third-party partners to validate the PowerShell on Linux and open source experiences. I\u2019d like to highlight, in particular, the collaboration with the <strong>engineers from<\/strong> <strong>Amazon AWS, Chef, and VMware, and thank each of them for their efforts to port Windows PowerShell Cmdlets to Linux and for delivering the PowerShell on Linux demos<\/strong> &#8211;The PowerShell team really appreciates it! \u2013 You can watch their cool demos in the PowerShell team\u2019s <a href=\"https:\/\/aka.ms\/qwmv8m\">YouTube Channel<\/a><\/p>\n<p>We also learned tons from the .NET Core team about creating an open source project. The .NET Core team pioneered inside Microsoft the new \u201copen\u201d culture and new thinking by delivering customers an open source platform for Windows as well as Linux. Their experience enabled the PowerShell team to start the open source journey with empathy and confidence. Thank you!<\/p>\n<p>As I mentioned earlier, one of our goals with open sourcing PowerShell was to start small and learn. So we embarked the open source journey last year by delivering portions of PowerShell and DSC components: <a href=\"https:\/\/github.com\/PowerShell\/DscResources\"><em>DSC Resources<\/em><\/a><em>, <\/em><a href=\"https:\/\/github.com\/PowerShell\/PSScriptAnalyzer\"><em>Script Analyzer<\/em><\/a><em>, <\/em><a href=\"https:\/\/github.com\/PowerShell\/PowerShellEditorServices\"><em>Editor Services<\/em><\/a><em>, <\/em><a href=\"https:\/\/github.com\/PowerShell\/PowerShell-Docs\"><em>PowerShell Documentation<\/em><\/a><em>, <\/em>and launched<em> the <\/em><a href=\"http:\/\/www.powershellgallery.com\/\"><em>PowerShell Gallery.<\/em><\/a><\/p>\n<p style=\"text-align: center\"><em>The experience of working in GitHub to maintain these small projects and maintaining the PowerShell Gallery as a service were foundational and critical to the success of delivering the PowerShell open source project<\/em><\/p>\n<p>Why? Change is hard, especially after years of working and delivering PowerShell using the predictable Windows engineering system and release processes. Adapting and switching to a new culture, engineering system and new processes is not something you want or can do overnight. The risk of making costly mistakes increases rapidly if you do, and we did not want existing Windows PowerShell customers and partners to experience quality or support issues because of our decision to open source Windows PowerShell. Each open source step we took was designed to teach us what it took to be successful and establish the internal processes and relationships &#8211; Imagine the conversations required when we took the initiative to ship a community sourced project, Pester, in Windows for the very first time!<\/p>\n<p>Based on this, the team took a gradual and incremental approach with refactoring the code, and migrating from the Windows engineering system to the GitHub PowerShell project \u2013 it created a great opportunity to learn and adopt the DevOps culture and best practices. We adopted internal and open-source engineering tools, integrated to continuous integration (CI) services, created new agile engineering processes and build system, moved to a <a href=\"https:\/\/github.com\/PowerShell\/psl-pester\">Pester<\/a> based test framework, and established the <a href=\"https:\/\/github.com\/PowerShell\/PowerShell\/blob\/cf23084d2a7c4d6d5f7b82fe65a1255fac61ce00\/docs\/community\/governance.md\">Community Governance<\/a> for managing contributions.<\/p>\n<p>You can now imagine how proud I am, and how difficult it is for me to express in words <strong>my gratitude to each member of the PowerShell Software Engineering and Program Management teams, and all the Partners who participated in this project.<\/strong> I am so fortunate to be part of this great team and community. Their effort and accomplishment with delivering in parallel a new open source PowerShell and a traditional Windows PowerShell versions (<a href=\"https:\/\/www.microsoft.com\/en-us\/download\/details.aspx?id=50395\">See WMF 5.0 for details)<\/a> is simply put, amazing! To me, they are clear examples of growth-mindset, passion, superb engineering, collaboration, and risk-taking. \u00a0All the hard work however was worth it, because we had fun doing it too J!<\/p>\n<p>Delivering this project was a significant effort, and we didn\u2019t do it alone. I\u2019d like to <strong>thank the Microsoft\u2019s Business team, Doc team, Legal team, Marketing team, Support team and our leadership and management teams<\/strong> for their support, trust, hard work and collaboration to help made this \u201cbig idea\u201d a reality.<\/p>\n<p>Finally, I\u2019d like to <strong>thank and highlight the work and effort from the Microsoft Enterprise Open Source team<\/strong> with delivering the Linux PowerShell editions &#8211; without them we couldn\u2019t have delivered PowerShell on Linux support!<\/p>\n<p>There\u2019s still a lot the work left to do before a PowerShell version based on open source is ready for customers to deploy in production systems \u2013 <strong>this is the primary reason for<\/strong> <strong>announcing today the \u201calpha\u201d release. \u00a0<\/strong>Our mission is to work with you (the PowerShell Community) to deliver this next milestone &#8212; we\u2019ll need your help with increasing test coverage, continuing improvement of the Linux experience and resolving the list of GitHub issues and backlog. In the upcoming weeks we will put together a roadmap proposal to deliver production supported builds for Windows and Linux.<\/p>\n<p>I\u2019d like to close with a final thought about today\u2019s announcement. We\u2019re starting a new, exciting chapter with open sourcing PowerShell and PowerShell on Linux. I\u2019m optimistic that we did many things right; however, as part of starting a new journey, we\u2019ll discover mistakes and new challenges. We believe that <u>working together to resolve these challenges will make the PowerShell Community even stronger and more trusted<\/u>. The Microsoft PowerShell team is committed to be an active, responsible and transparent contributor. We hope you will join us, and together we\u2019ll focus on making PowerShell the best management and automation tool on the planet!<\/p>\n<p><em>So<\/em>, <strong><em>are you ready to contribute?<\/em><\/strong><em> \u00a0Go to the <\/em><a href=\"https:\/\/github.com\/PowerShell\/PowerShell\/blob\/master\/.github\/CONTRIBUTING.md\"><em>Contributor Guide<\/em><\/a><em> in GitHub to learn how.<\/em><\/p>\n<p>Angel Calvo,<\/p>\n<p><strong>Twitter: <\/strong><a href=\"https:\/\/twitter.com\/ANGELCALVOS\"><strong>@ANGELCALVOS<\/strong><\/a><\/p>\n<p><strong>Helpful Links<\/strong><\/p>\n<ul>\n<li><a href=\"https:\/\/aka.ms\/hosoyc\"><u>Jeffrey Snover\u2019s <\/u><u>official<\/u><u> blog announcement<\/u><\/a><\/li>\n<li><u><\/u><u> <\/u><a href=\"https:\/\/aka.ms\/uzb6ua\">PowerShell Team Blog<\/a><\/li>\n<li><a href=\"https:\/\/aka.ms\/fj86tf\">PowerShell Webinar<\/a>\u00a0on PowerShell on Linux and Open Source<\/li>\n<li><a href=\"https:\/\/aka.ms\/qwmv8m\">PowerShell Team YouTube official channel<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/PowerShell\/PowerShell\">GitHub PowerShell Project<\/a><\/li>\n<li><a href=\"https:\/\/www.microsoft.com\/net\/core#windows\">.NET Core Project<\/a><\/li>\n<\/ul>\n<p><strong>\u00a0<\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hello everyone, My name is Angel Calvo, I am Microsoft\u2019s Group Software Engineering Manager for PowerShell and Desired State Configuration (DSC). I&#8217;d like to take this opportunity to proudly represent the engineering team behind this project, and share a few thoughts about yesterday\u2019s historic announcement for PowerShell and our Community I am so excited about [&hellip;]<\/p>\n","protected":false},"author":600,"featured_media":13641,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[124,223,248,256,261,287],"class_list":["post-12265","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-powershell","tag-community","tag-news","tag-powershell","tag-powershell-core","tag-powershell-linux","tag-releasedownload"],"acf":[],"blog_post_summary":"<p>Hello everyone, My name is Angel Calvo, I am Microsoft\u2019s Group Software Engineering Manager for PowerShell and Desired State Configuration (DSC). I&#8217;d like to take this opportunity to proudly represent the engineering team behind this project, and share a few thoughts about yesterday\u2019s historic announcement for PowerShell and our Community I am so excited about [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/posts\/12265","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/users\/600"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/comments?post=12265"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/posts\/12265\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/media\/13641"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/media?parent=12265"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/categories?post=12265"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/tags?post=12265"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}