"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[8004],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>f});var n=a(67294);function o(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function r(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function c(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?r(Object(a),!0).forEach((function(t){o(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):r(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function i(e,t){if(null==e)return{};var a,n,o=function(e,t){if(null==e)return{};var a,n,o={},r=Object.keys(e);for(n=0;n<r.length;n++)a=r[n],t.indexOf(a)>=0||(o[a]=e[a]);return o}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(n=0;n<r.length;n++)a=r[n],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(o[a]=e[a])}return o}var l=n.createContext({}),s=function(e){var t=n.useContext(l),a=t;return e&&(a="function"==typeof e?e(t):c(c({},t),e)),a},u=function(e){var t=s(e.components);return n.createElement(l.Provider,{value:t},e.children)},p="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},h=n.forwardRef((function(e,t){var a=e.components,o=e.mdxType,r=e.originalType,l=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),p=s(a),h=o,f=p["".concat(l,".").concat(h)]||p[h]||d[h]||r;return a?n.createElement(f,c(c({ref:t},u),{},{components:a})):n.createElement(f,c({ref:t},u))}));function f(e,t){var a=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var r=a.length,c=new Array(r);c[0]=h;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i[p]="string"==typeof e?e:o,c[1]=i;for(var s=2;s<r;s++)c[s]=a[s];return n.createElement.apply(null,c)}return n.createElement.apply(null,a)}h.displayName="MDXCreateElement"},37861:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>c,default:()=>d,frontMatter:()=>r,metadata:()=>i,toc:()=>s});var n=a(87462),o=(a(67294),a(3905));const r={layout:"post",title:"The Apache Software Foundation Announces Apache CloudStack Has Become A Top-Level Project",tags:["news"],slug:"the_apache_software_foundation_announces"},c=void 0,i={permalink:"/blog/the_apache_software_foundation_announces",editUrl:"https://github.com/apache/cloudstack-www/tree/main/blog/2013-03-25-the_apache_software_foundation_announces.md",source:"@site/blog/2013-03-25-the_apache_software_foundation_announces.md",title:"The Apache Software Foundation Announces Apache CloudStack Has Become A Top-Level Project",description:"Mature, open source turn-key platform for delivering scalable, full-featured Infrastructure-as-a-Service (IaaS) clouds.",date:"2013-03-25T00:00:00.000Z",formattedDate:"March 25, 2013",tags:[{label:"news",permalink:"/blog/tags/news"}],hasTruncateMarker:!1,authors:[],frontMatter:{layout:"post",title:"The Apache Software Foundation Announces Apache CloudStack Has Become A Top-Level Project",tags:["news"],slug:"the_apache_software_foundation_announces"},prevItem:{title:"Apache CloudStack Weekly News - 25 March 2013",permalink:"/blog/apache_cloudstack_weekly_news_251"},nextItem:{title:"Apache CloudStack Weekly News - 18 March 2013",permalink:"/blog/apache_cloudstack_weekly_news_181"}},l={authorsImageUrls:[]},s=[],u={toc:s},p="wrapper";function d(e){let{components:t,...a}=e;return(0,o.kt)(p,(0,n.Z)({},u,a,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,(0,o.kt)("strong",null,(0,o.kt)("em",null,"Mature, open source turn-key platform for delivering scalable, full-featured Infrastructure-as-a-Service (IaaS) clouds."))),(0,o.kt)("p",null,"Forest Hill, MD - 25 March 2013"),(0,o.kt)("p",null,"The Apache Software Foundation (ASF), the all-volunteer developers, stewards, and incubators of nearly 150 open source projects and initiatives, announced today that Apache CloudStack has graduated from the Apache Incubator to become a Top-Level Project (TLP), signifying that the project's community and products have been well-governed under the ASF's meritocratic process and principles."),(0,o.kt)("p",null,'"When CloudStack first became an Apache Incubator project, it was a well-established cloud management platform, so its codebase was already mature," said Chip Childers, Vice President of Apache CloudStack. "Our work in the Incubator has focused on growing a really strong community around the code and establishing the governance practices expected of a top-level project within the Apache Software Foundation."'),(0,o.kt)("p",null,"Formerly the product of Cloud.com, which was acquired by Citrix in 2011, CloudStack was donated by Citrix to ASF and submitted to the Apache Incubator in April 2012. It is a well-established cloud management platform, already widely in production use by many organizations. It is used to deliver Infrastructure-as-a-Service (IaaS) cloud computing in both private-cloud, public, and hybrid cloud environments. It has been proven to be both stable and highly scalable, underpinning production clouds more than 30,000 physical nodes, in geo-distributed environments."),(0,o.kt)("p",null,"Asked to comment on the importance of becoming a Top-Level Project, Childers added \"CloudStack had the advantage of having many long-term, large deployments which had proven the stability and scalability of the technology. This helped us concentrate on adopting the 'Apache Way' of governance, which is well understood and open, delivering so many great pieces of software over the years.\""),(0,o.kt)("p",null,'"We know that Infrastructure-as-a-Service is the next generation of IT infrastructure, and that people will demand open standards and open governance for such an important layer in their IT stack. That is why the CloudStack project meeting the rigorous standards of ASF governance is so significant. "'),(0,o.kt)("p",null,"When asked to comment on the Apache CloudStack community itself, Childers said: \"we've managed to build a diverse, friendly and very open community around CloudStack. New members receive a really warm welcome and we make sure that all contributors are on an equal footing, whether they are writing code or helping with any other aspect of the project. Anybody thinking of getting involved in the project would quickly find what a great community we are. As well as online involvement, we've already had a global collaboration conference and there are many CloudStack groups established in many different countries. \""),(0,o.kt)("p",null,(0,o.kt)("strong",null,"About Apache CloudStack")),(0,o.kt)("p",null,"Apache CloudStack is a complete software suite for creating Infrastructure-as-a-Service (IaaS) clouds. Target environments include service providers and enterprises. It is used by many service providers to set up an on-demand, elastic cloud computing services and by enterprises to set up a private cloud for use by their own employees. Apache CloudStack is also available to individuals and organizations that wish to study and implement an IaaS for personal, educational, and/or production use."),(0,o.kt)("p",null,"Further information on Apache CloudStack can be found at ",(0,o.kt)("a",{href:"http://cloudstack.apache.org/"},"cloudstack.apache.org"),"."),(0,o.kt)("p",null,(0,o.kt)("strong",null,"About Apache Software Foundation")),(0,o.kt)("p",null,"The Apache Software Foundation, a US 501(3)(c) non-profit corporation, provides organizational, legal, and financial support for a broad range of over 140 open source software projects. The Foundation provides an established framework for intellectual property and financial contributions that simultaneously limits potential legal exposure for our project committers. Through a collaborative and meritocratic development process known as The Apache Way, Apache(tm) projects deliver enterprise-grade, freely available software products that attract large communities of users. The pragmatic Apache License makes it easy for all users, commercial and individual, to deploy Apache products. "))}d.isMDXComponent=!0}}]);