CINXE.COM

Story – Open Source

<!doctype html> <html lang="en-US"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1"> <link rel="preload" href="https://www.ibm.com/opensource/site-content/themes/ibmdeveloper-carbon/style.css?cb=1" as="style" onload="this.onload=null;this.rel='stylesheet'"> <noscript><link rel="stylesheet" href="https://www.ibm.com/opensource/site-content/themes/ibmdeveloper-carbon/style.css?cb=1"></noscript> <script> /*! loadCSS. [c]2017 Filament Group, Inc. MIT License */ /* This file is meant as a standalone workflow for - testing support for link[rel=preload] - enabling async CSS loading in browsers that do not support rel=preload - applying rel preload css once loaded, whether supported or not. */ (function( w ){ "use strict"; // rel=preload support test if( !w.loadCSS ){ w.loadCSS = function(){}; } // define on the loadCSS obj var rp = loadCSS.relpreload = {}; // rel=preload feature support test // runs once and returns a function for compat purposes rp.support = (function(){ var ret; try { ret = w.document.createElement( "link" ).relList.supports( "preload" ); } catch (e) { ret = false; } return function(){ return ret; }; })(); // if preload isn't supported, get an asynchronous load by using a non-matching media attribute // then change that media back to its intended value on load rp.bindMediaToggle = function( link ){ // remember existing media attr for ultimate state, or default to 'all' var finalMedia = link.media || "all"; function enableStylesheet(){ // unbind listeners if( link.addEventListener ){ link.removeEventListener( "load", enableStylesheet ); } else if( link.attachEvent ){ link.detachEvent( "onload", enableStylesheet ); } link.setAttribute( "onload", null ); link.media = finalMedia; } // bind load handlers to enable media if( link.addEventListener ){ link.addEventListener( "load", enableStylesheet ); } else if( link.attachEvent ){ link.attachEvent( "onload", enableStylesheet ); } // Set rel and non-applicable media type to start an async request // note: timeout allows this to happen async to let rendering continue in IE setTimeout(function(){ link.rel = "stylesheet"; link.media = "only x"; }); // also enable media after 3 seconds, // which will catch very old browsers (android 2.x, old firefox) that don't support onload on link setTimeout( enableStylesheet, 3000 ); }; // loop through link elements in DOM rp.poly = function(){ // double check this to prevent external calls from running if( rp.support() ){ return; } var links = w.document.getElementsByTagName( "link" ); for( var i = 0; i < links.length; i++ ){ var link = links[ i ]; // qualify links to those with rel=preload and as=style attrs if( link.rel === "preload" && link.getAttribute( "as" ) === "style" && !link.getAttribute( "data-loadcss" ) ){ // prevent rerunning on link link.setAttribute( "data-loadcss", true ); // bind listeners to toggle media back rp.bindMediaToggle( link ); } } }; // if unsupported, run the polyfill if( !rp.support() ){ // run once at least rp.poly(); // rerun poly on an interval until onload var run = w.setInterval( rp.poly, 500 ); if( w.addEventListener ){ w.addEventListener( "load", function(){ rp.poly(); w.clearInterval( run ); } ); } else if( w.attachEvent ){ w.attachEvent( "onload", function(){ rp.poly(); w.clearInterval( run ); } ); } } // commonjs if( typeof exports !== "undefined" ){ exports.loadCSS = loadCSS; } else { w.loadCSS = loadCSS; } }( typeof global !== "undefined" ? global : this ) ); </script> <title>Story &#8211; Open Source</title> <link rel='dns-prefetch' href='//1.www.s81c.com' /> <link rel='dns-prefetch' href='//resources.digital-cloud-ibm.medallia.eu' /> <link rel='dns-prefetch' href='//s.w.org' /> <link rel="alternate" type="application/rss+xml" title="Open Source &raquo; Feed" href="https://www.ibm.com/opensource/feed/" /> <link rel="alternate" type="application/rss+xml" title="Open Source &raquo; Comments Feed" href="https://www.ibm.com/opensource/comments/feed/" /> <link rel="canonical" href="https://www.ibm.com/opensource/story/" /> <!-- <meta name="madeupmeta" content="/opensource/story/--https://www.ibm.com/opensource" /> --> <meta name="description" content="Open Source @ IBM A strong history and commitment to open source Intro to Open @ IBM Before Open was&hellip;" /> <meta name="keywords" content=""> <!-- if condition here for og og_meta --> <meta property="og:title" content="Story" /> <meta property="og:description" content="Open Source @ IBM A strong history and commitment to open source Intro to Open @ IBM Before Open was&hellip;" /> <meta property="og:type" content="" /> <meta property="og:site_name" content="IBM Developer" /> <meta property="og:url" content="https://www.ibm.com/opensource/story/" /> <meta property="og:image" content="https://s3.us.cloud-object-storage.appdomain.cloud/ibmdevwp/icons/social/social.jpg"/> <!-- if condition here for twitter twitter_meta --> <meta property="twitter:account_id" content="16362921" /> <meta name="twitter:card" content="summary"> <meta name="twitter:url" content="https://www.ibm.com/opensource/story/"> <meta name="twitter:title" content="Story"> <meta name="twitter:description" content="Open Source @ IBM A strong history and commitment to open source Intro to Open @ IBM Before Open was&hellip;"> <meta name="twitter:image" content="https://s3.us.cloud-object-storage.appdomain.cloud/ibmdevwp/icons/social/social.jpg"> <meta property="twitter:image:src" content="https://s3.us.cloud-object-storage.appdomain.cloud/ibmdevwp/icons/social/social.jpg" /> <meta name="twitter:site" content="https://developer.ibm.com"> <meta name="twitter:creator" content="@ibmdeveloper"> <meta name="ahrefs-site-verification" content="94fa8aa62b043c70442b349844ee10902416702fc2728b6a378a00d49ecc61d7"> <!-- BEGIN: Use this section to set page specific variables for the Page Tag --> <script language="JavaScript">var NTPT_PGEXTRA="ibmCmaId=484&ibmContentAreas=";</script> <!--END --> <script> digitalData = { "page": { "category": { "primaryCategory": "SOFDCACLZZ" }, "pageInfo": { "effectiveDate": "2020-01-07T00:00:00", "language": "en", "publishDate": "2020-02-06 15:57:08", "expiryDate": "", "publisher": "IBM Corporation", "version": "v18", "ibm": { "contentDelivery": "IBM Developer template", "contentProducer": "IBM Developer", "country": "ZZ", "contentArea": "", "owner": "developerWorks Content/Raleigh/IBM", "siteID": "DWNEXT", "subject": "ZZ000", "type": "", "contentId": "484", }, "keywords": "", "description": "Open Source @ IBM A strong history and commitment to open source Intro to Open @ IBM Before Open was&hellip;" } } }; window._analytics = { "coremetrics": false, "optimizely": false, "googleAddServices": false, "addRoll": false, "intercom": false, "fullStory": false, "hotjar": false, "tealeaf": false, "nps": true, "segment_key": 'HU3dbkAG5wE0F1IkRf9S1RexlAqo3jby' }; </script> <!-- Segment meta tag --> <meta name="segment" property="developerWorks (developerWorks)" productTitle="developerWorks" value="Home English (developerWorks)"/> <link rel="icon" href="//www.ibm.com/favicon.ico"/> <script type="text/javascript"> window._wpemojiSettings = {"baseUrl":"https:\/\/s.w.org\/images\/core\/emoji\/13.0.1\/72x72\/","ext":".png","svgUrl":"https:\/\/s.w.org\/images\/core\/emoji\/13.0.1\/svg\/","svgExt":".svg","source":{"concatemoji":"https:\/\/www.ibm.com\/opensource\/wp-includes\/js\/wp-emoji-release.min.js?ver=5.6.14"}}; !function(e,a,t){var n,r,o,i=a.createElement("canvas"),p=i.getContext&&i.getContext("2d");function s(e,t){var a=String.fromCharCode;p.clearRect(0,0,i.width,i.height),p.fillText(a.apply(this,e),0,0);e=i.toDataURL();return p.clearRect(0,0,i.width,i.height),p.fillText(a.apply(this,t),0,0),e===i.toDataURL()}function c(e){var t=a.createElement("script");t.src=e,t.defer=t.type="text/javascript",a.getElementsByTagName("head")[0].appendChild(t)}for(o=Array("flag","emoji"),t.supports={everything:!0,everythingExceptFlag:!0},r=0;r<o.length;r++)t.supports[o[r]]=function(e){if(!p||!p.fillText)return!1;switch(p.textBaseline="top",p.font="600 32px Arial",e){case"flag":return s([127987,65039,8205,9895,65039],[127987,65039,8203,9895,65039])?!1:!s([55356,56826,55356,56819],[55356,56826,8203,55356,56819])&&!s([55356,57332,56128,56423,56128,56418,56128,56421,56128,56430,56128,56423,56128,56447],[55356,57332,8203,56128,56423,8203,56128,56418,8203,56128,56421,8203,56128,56430,8203,56128,56423,8203,56128,56447]);case"emoji":return!s([55357,56424,8205,55356,57212],[55357,56424,8203,55356,57212])}return!1}(o[r]),t.supports.everything=t.supports.everything&&t.supports[o[r]],"flag"!==o[r]&&(t.supports.everythingExceptFlag=t.supports.everythingExceptFlag&&t.supports[o[r]]);t.supports.everythingExceptFlag=t.supports.everythingExceptFlag&&!t.supports.flag,t.DOMReady=!1,t.readyCallback=function(){t.DOMReady=!0},t.supports.everything||(n=function(){t.readyCallback()},a.addEventListener?(a.addEventListener("DOMContentLoaded",n,!1),e.addEventListener("load",n,!1)):(e.attachEvent("onload",n),a.attachEvent("onreadystatechange",function(){"complete"===a.readyState&&t.readyCallback()})),(n=t.source||{}).concatemoji?c(n.concatemoji):n.wpemoji&&n.twemoji&&(c(n.twemoji),c(n.wpemoji)))}(window,document,window._wpemojiSettings); </script> <style type="text/css"> img.wp-smiley, img.emoji { display: inline !important; border: none !important; box-shadow: none !important; height: 1em !important; width: 1em !important; margin: 0 .07em !important; vertical-align: -0.1em !important; background: none !important; padding: 0 !important; } </style> <link rel='stylesheet' id='wp-block-library-css' href='https://www.ibm.com/opensource/wp-includes/css/dist/block-library/style.min.css?ver=5.6.14' type='text/css' media='all' /> <link rel='stylesheet' id='pagepost_css-css' href='https://www.ibm.com/opensource/site-content/themes/ibmdeveloper-carbon/css/pagepost.css?ver=5.6.14' type='text/css' media='all' /> <style id='pagepost_css-inline-css' type='text/css'> .page-header.with-video { padding-top: 0; padding-bottom: 0; } .page-header.with-video .cpt-hero__wrap { margin-bottom: 0 !important; padding: 0 !important; max-width: inherit !important; } .page-header.with-video .cpt-hero__wrap .bx--grid { padding: 0 !important; margin: 0 !important; max-width: none; } .page-header.with-video .text-area { max-width: 760px; margin: 0 auto; padding: 4rem; display: flex; align-items: center; height: 100%; } .page-header.with-video .text-area > div > div { display: flex; align-items: center; } .page-header.with-video .text-area a { color: white; } .page-header.with-video .text-area a:hover { text-decoration: underline; } .page-header.with-video .text-area .cpt-byline__subtitle { color: white; font-weight: 600; font-size: 1.2rem; margin-top: 0; } .color-bg-blue { background-color: #0062ff !important; } .color-bg-black { background-color: black !important; } .color-bg-black * { color: white !important; } .underlined-header { color: #3a3a3a; border-bottom: 8px solid #0062ff; font-weight: 800; font-size: 2.5rem; line-height: 3.7rem; } .underlined-subheader { color: #3a3a3a; border-bottom: 8px solid #d8d8d8; font-size: 2rem; line-height: 3.5rem; } .table-of-contents li { list-style-type: none !important; } .table-of-contents a { text-decoration: none !important; font-weight: 600; color: #bebebe !important; } .table-of-contents a.selected { color: #282828 !important; } </style> <script defer type='text/javascript' src='https://www.ibm.com/opensource/site-content/themes/ibmdeveloper-carbon/js/ibmcode.js?ver=20151217' id='code-utils-defer-js'></script> <script async type='text/javascript' src='https://www.ibm.com/opensource/site-content/themes/ibmdeveloper-carbon/js/carbon-components.min.js?cb=123&#038;ver=5.6.14' id='carbon-components-async-js'></script> <script async type='text/javascript' src='//1.www.s81c.com/common/stats/ida_stats.js' id='coremetrics-async-js'></script> <script async type='text/javascript' src='//resources.digital-cloud-ibm.medallia.eu/wdceuibm/2398/onsite/embed.js' id='medallia-async-js'></script> <link rel="https://api.w.org/" href="https://www.ibm.com/opensource/developerapi/" /><link rel="alternate" type="application/json" href="https://www.ibm.com/opensource/developerapi/wp/v2/pages/484" /><link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://www.ibm.com/opensource/xmlrpc.php?rsd" /> <link rel="wlwmanifest" type="application/wlwmanifest+xml" href="https://www.ibm.com/opensource/wp-includes/wlwmanifest.xml" /> <meta name="generator" content="WordPress 5.6.14" /> <link rel='shortlink' href='https://www.ibm.com/opensource/?p=484' /> <link rel="alternate" type="application/json+oembed" href="https://www.ibm.com/opensource/developerapi/oembed/1.0/embed?url=https%3A%2F%2Fwww.ibm.com%2Fopensource%2Fstory%2F" /> <link rel="alternate" type="text/xml+oembed" href="https://www.ibm.com/opensource/developerapi/oembed/1.0/embed?url=https%3A%2F%2Fwww.ibm.com%2Fopensource%2Fstory%2F&#038;format=xml" /> <style type="text/css">.recentcomments a{display:inline !important;padding:0 !important;margin:0 !important;}</style></head> <body data-jamie="1" id="ibm-com" data-envt="www.ibm.com" data-loggedin="" data-nls="" data-envt2="production" class="page-template page-template-page-static page-template-page-static-php page page-id-484 no-fixed-menu nosb"> <div class="bx--header--website-wrap"> <div class="code_content__wrap"> <header aria-label="IBM Platform Name" class="bx--header" role="banner"> <a class="bx--skip-to-content" href="#main-content" tabindex="0">Skip to main content</a> <button aria-label="Open menu" id="developer-burger" class="bx--header__action--menu bx--header__action bx--header__menu-trigger bx--header__menu-toggle" title="Open menu" type="button"> <svg focusable="false" preserveAspectRatio="xMidYMid meet" xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" aria-hidden="true" style="will-change: transform;"> <path d="M2 14.8h16V16H2zm0-3.6h16v1.2H2zm0-3.6h16v1.2H2zM2 4h16v1.2H2z"></path> </svg> </button> <a class="bx--header__name-old" href="https://www.ibm.com/opensource/"><span class="bx--header__name--prefix">IBM</span>&nbsp;Developer</a> <div class="bx--header__name"> <a class="bx--header__ibm" href="//www.ibm.com"> <svg class="Footer-module--logo--3otJM" width="47" height="30" viewBox="0 -10 85 52" xmlns="http://www.w3.org/2000/svg"><g fill-rule="evenodd"><path d="M0 32h15.689v-2.038H0zM0 27.721h15.689v-2.038H0zM4.483 23.442h6.724v-2.037H4.483zM4.483 19.164h6.724v-2.038H4.483zM4.483 14.885h6.724v-2.037H4.483zM4.482 10.606h6.724V8.568H4.482zM0 6.327h15.689V4.29H0zM0 2.049h15.689V.011H0zM17.93 29.963V32h16.504a8.521 8.521 0 0 0 5.54-2.037H17.93zM17.93 25.683v2.038h23.914a8.535 8.535 0 0 0 .85-2.038H17.93zM22.412 23.442h6.724v-2.037h-6.724zM40.124 17.126H22.412v2.038H41.77a8.62 8.62 0 0 0-1.645-2.038M22.413 12.848v2.036h17.786a8.612 8.612 0 0 0 1.644-2.037h-19.43zM42.693 6.327a8.447 8.447 0 0 0-.85-2.037H17.93v2.037h24.763zM39.974 2.049a8.521 8.521 0 0 0-5.54-2.037H17.93v2.037h22.044zM22.412 10.606h6.724V8.568h-6.724zM35.453 10.606h7.29a8.603 8.603 0 0 0 .248-2.038h-7.538v2.038zM35.453 21.405v2.037h7.538c0-.703-.09-1.384-.248-2.037h-7.29zM57.457 0H44.825v2.038h13.34zM44.826 32h11.21v-2.038h-11.21zM44.826 27.72h11.21v-2.038h-11.21zM49.309 23.439h6.727v-2.038h-6.727zM49.309 19.159h6.727v-2.038h-6.727zM69.488 32h11.21v-2.038h-11.21zM69.488 27.72h11.21v-2.038h-11.21zM69.488 23.439h6.726v-2.038h-6.726zM69.487 19.159h6.726v-2.038h-6.726zM69.488 14.879h6.726V12.84H63.606l-.707 2.038h5.903l.686-1.94zM61.916 12.84H49.31v2.039h6.726v-1.94l.686 1.94h5.903zM76.213 8.56H65.091l-.707 2.038h11.83zM68.06 0l-.706 2.038h13.344V0zM62.757 32l.72-2.038h-1.432zM61.254 27.72h3.015l.72-2.038h-4.455zM59.743 23.44h6.037l.72-2.039h-7.476zM58.232 19.159h9.06l.719-2.038h-10.5zM49.309 10.598h11.83l-.707-2.038H49.309zM65.868 6.318h14.83V4.28H66.576zM58.947 4.28H44.826v2.038h14.828z"></path></g></svg> </a> <a href="https://www.ibm.com/opensource/" class="bx--header__ibmdeveloper"> <b>Open Source</b> @ IBM </a> </div> <nav aria-label="IBM [Platform]" class="bx--header__nav"> <ul class="bx--header__menu-bar" role="menubar"><li id='our_story' class=' menu-item menu-item-type-post_type menu-item-object-page current-menu-item page_item page-item-484 current_page_item'><a role="menuitem" class="bx--header__menu-item " href="https://www.ibm.com/opensource/story/">Our story</a></li> <li id='culture' class=' menu-item menu-item-type-post_type menu-item-object-page'><a role="menuitem" class="bx--header__menu-item " href="https://www.ibm.com/opensource/enterprise/">Culture</a></li> <li id='community' class=' menu-item menu-item-type-post_type menu-item-object-page'><a role="menuitem" class="bx--header__menu-item " href="https://www.ibm.com/opensource/community-involvement/">Community</a></li> <li id='github' class=' menu-item menu-item-type-custom menu-item-object-custom'><a role="menuitem" class="bx--header__menu-item " href="https://github.com/IBM">GitHub</a></li> </ul> </nav> <div class="bx--header__global"> <div id="header-search-module" class="GlobalSearch-module--container GlobalSearch-module--hidden" role="search"> <label for="search-input" id="search-label" class="GlobalSearch-module--label">Search</label> <form action="https://www.ibm.com/opensource/" method="GET" class="GlobalSearch-module--inputWrapper" role="combobox" aria-owns="search-menu" aria-haspopup="menu" aria-expanded="false"> <button tabindex="0" class="GlobalSearch-module--searchButton GlobalSearch-module--search-button--search" type="button" aria-label="Open search"> <svg focusable="false" preserveAspectRatio="xMidYMid meet" style="will-change:transform" description="Open search" xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 32 32" aria-hidden="true"> <path d="M30 28.59L22.45 21A11 11 0 1 0 21 22.45L28.59 30zM5 14a9 9 0 1 1 9 9 9 9 0 0 1-9-9z"></path> </svg> </button> <input type="text" autocomplete="off" tabindex="-1" aria-autocomplete="list" aria-controls="search-menu" aria-activedescendant="menu-item-0" class="GlobalSearch-module--input GlobalSearch-module--hidden" id="search-input-header" placeholder="Search Open Source @ IBM" value="" name="s"> <button tabindex="-1" class="GlobalSearch-module--searchButton GlobalSearch-module--search-button--close GlobalSearch-module--hidden" type="button" aria-label="Clear search"> <svg focusable="false" preserveAspectRatio="xMidYMid meet" style="will-change:transform" description="Clear search" xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 32 32" aria-hidden="true"> <path d="M24 9.4L22.6 8 16 14.6 9.4 8 8 9.4l6.6 6.6L8 22.6 9.4 24l6.6-6.6 6.6 6.6 1.4-1.4-6.6-6.6L24 9.4z"></path> </svg> </button> </form> <ul aria-labelledby="search-label" role="menu" id="search-menu" class="GlobalSearch-module--list GlobalSearch-module--hidden"></ul> </div> <div id="header-login-module" aria-expanded="false" class="GlobalLogin-module--container GlobalLogin-module--hidden" role="login"> <button aria-label="Open menu" class="bx--header__action--login bx--header__action" title="Open menu" type="button"> <svg focusable="false" preserveAspectRatio="xMidYMid meet" xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 32 32" aria-hidden="true" style="will-change: transform;"> <path d="M16 2a14 14 0 1 0 14 14A14 14 0 0 0 16 2zm-6 24.38v-2A3.22 3.22 0 0 1 13 21h6a3.22 3.22 0 0 1 3 3.39v2a11.92 11.92 0 0 1-12 0zm14-1.46v-.61A5.21 5.21 0 0 0 19 19h-6a5.2 5.2 0 0 0-5 5.31v.59a12 12 0 1 1 16 0z"></path><path d="M16 7a5 5 0 1 0 5 5 5 5 0 0 0-5-5zm0 8a3 3 0 1 1 3-3 3 3 0 0 1-3 3z"></path> </svg> </button> <ul id="ibm-signin-minimenu-container" role="menu" aria-label="Profile" class="bx--header__submenu"> <li class="menu-item"><a class="bx--header__menu-item" role="menuitem" href="/profile">My Dashboard</a></li> <li class="menu-item"><a class="bx--header__menu-item" role="menuitem" href="https://myibm.ibm.com/?lnk=mmi" tabindex="0">My IBM</a></li> <li class="menu-item"><a id="bx--header-signinout" class="bx--header__menu-item" role="menuitem" rel="nofollow" href="https://developer.ibm.com/sso/login?d=https%3A%2F%2Fwww.ibm.com%2Fopensource%2Fstory%2F&lang=us_EN" tabindex="-1">Sign In</a></li> </ul> </div> </div> </header> </div> </div> <div class="side-nav-click-to-close side-nav-click-to-close__closed" id="code--side-nav-cover"></div> <!-- Navigation wrapper for accessibility --> <nav class="bx--side-nav__navigation bx--side-nav bx--side-nav--expanded bx--side-nav--website bx--side-nav--website--dark bx--side-nav--ux" aria-label="Side navigation" id="code--side-nav-old"> <!--nav class="bx--side-nav__navigation bx--side-nav bx--side-nav--ux bx--side-nav--website--dark" role="navigation" aria-label="Navigation" id="code--side-nav"--> <!-- <header class="bx--side-nav__header"></header> --> <!-- Renders all of our navigation items --> <ul class="bx--side-nav__items" id="developerNavTriggersMobile"><li data-level="0" class='bx--side-nav__item '><a href="https://www.ibm.com/opensource/community-involvement/" class="bx--side-nav__link" role="menuitem"><span class="bx--side-nav__link-text">Our story</span></a></li> <hr class="bx--side-nav__divider"> <li data-level="0" class='bx--side-nav__item '><a href="/opensource/open-projects/" class="bx--side-nav__link" role="menuitem"><span class="bx--side-nav__link-text">Projects</span></a></li> <hr class="bx--side-nav__divider"> <li data-level="0" class='bx--side-nav__item '><a href="/opensource/enterprise/" class="bx--side-nav__link" role="menuitem"><span class="bx--side-nav__link-text">Culture</span></a></li> <hr class="bx--side-nav__divider"> <li data-level="0" class='bx--side-nav__item'><button aria-haspopup="true" aria-expanded="false" class="bx--side-nav__submenu" type="button"> <span class="bx--side-nav__submenu-title">Community</span> <div class="bx--side-nav__icon bx--side-nav__icon--small bx--side-nav__submenu-chevron"> <svg focusable="false" preserveAspectRatio="xMidYMid meet" xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 32 32" aria-hidden="true" style="will-change: transform;"><path d="M16 22L6 12l1.4-1.4 8.6 8.6 8.6-8.6L26 12z"></path></svg> </div> </button> <ul class="bx--side-nav__menu" role="menu"> <li data-level="2" class='bx--side-nav__menu-item'><a href="https://www.ibm.com/opensource/community-involvement/" class="bx--side-nav__link" role="menuitem"><span class="bx--side-nav__link-text">Community involvement</span></a></li> <li data-level="2" class='bx--side-nav__menu-item'><a href="https://www.ibm.com/opensource/innovation/" class="bx--side-nav__link" role="menuitem"><span class="bx--side-nav__link-text">Meet our innovators</span></a></li> </ul> </li> <hr class="bx--side-nav__divider"> <li data-level="0" class='bx--side-nav__item '><a href="https://www.ibm.com/opensource/philanthropy/" class="bx--side-nav__link" role="menuitem"><span class="bx--side-nav__link-text">Giving back</span></a></li> <hr class="bx--side-nav__divider"> <li data-level="0" class='bx--side-nav__item '><a href="/opensource/blogs" class="bx--side-nav__link" role="menuitem"><span class="bx--side-nav__link-text">Blog</span></a></li> <hr class="bx--side-nav__divider"> <li data-level="0" class='bx--side-nav__item '><a href="https://github.com/IBM" class="bx--side-nav__link" role="menuitem"><span class="bx--side-nav__link-text">GitHub</span></a></li> <hr class="bx--side-nav__divider"> </ul> <!-- Renders the button to collapse or expand the side nav --> <!-- <footer class="bx--side-nav__footer"></footer> --> </nav> <!-- totally new layout --> <div class="ibm-developer" style="display:none;"> <div class="bx--grid"> <div class="bx--row"> <div class="bx--col-lg-12">max-content width</div> <div class="bx--col-lg-12">www.ibm.com</div> </div> </div> </div> <!-- begin new layout --> <div id="content" class="container nosb"> <div class="page_content"> <div class="page_content_wrap"> <!-- begin new layout --> <div class="code_postcontent"> <section class="wp-content wp-static-content"> <!-- begin main body content --> <!-- PAGE HEADER --> <div class="page-header with-video cpt-hero color-bg-blue"> <div class="cpt-hero__wrap"> <div class="bx--grid"> <div class="bx--row"> <div class="bx--col-lg-6 bx--col-md-8"> <div class="text-area"> <div> <p class=" cpt-byline__posttype" style="color:#d8d8d8;font-size:16px;font-weight:600;">Open Source @ IBM</p> <h1 class="cpt-byline__title" style="font-family:'IBM Plex Sans','Helvetica Neue',Arial,sans-serif;font-weight:600;">A strong history and commitment to open source</h1> <h2 class="cpt-byline__subtitle"></h2> </div> </div> </div> <div class="bx--col-lg-6 bx--col-md-8"> <img src="https://dw1.s81c.com/developer-static-pages/open/en/story/images/oss-story.png" style="width:100%"/> </div> </div> </div> </div> </div> <!-- PAGE SECTION --> <div class="page-section color-bg-white"> <div class="bx--grid"> <div class="bx--row" style="padding:0;"> <div class="bx--col-lg-2 bx--col-md-1"> <div class="bx--row"> <div class="bx--col-lg-12"> <ul class="table-of-contents"> <li><a href="#section-intro" class="selected">Intro to Open @ IBM</a></li> <li><a href="#section-before-open">Before Open was cool</a></li> <li><a href="#section-contributions">Open Contributions</a></li> <li><a href="#section-linux">Linux Kernel</a></li> <li><a href="#section-java">Java</a></li> <li><a href="#section-cloud">Cloud</a></li> <li><a href="#section-containers">Containers</a></li> <li><a href="#section-blockchain">Blockchain</a></li> <li><a href="#section-ai">Machine Learning &#038; AI</a></li> <li><a href="#section-iot">IoT</a></li> <li><a href="#section-node">Node</a></li> <li><a href="#section-quantum">Quantum</a></li> <li><a href="#section-future">The Future of Open</a></li> </ul> </div> </div> </div> <div class="bx--col-lg-8 bx--col-md-6"> <div class="bx--row" id="section-intro"> <div class="bx--col-lg-12"> <p>IBM&#8217;s long history and strong commitment to open source is the best kept secret in open source. While open source communities have long appreciated IBM&#8217;s role in the movement, until our <a href="https://newsroom.ibm.com/2018-05-08-IBM-and-Red-Hat-Join-Forces-to-Accelerate-Hybrid-Cloud-Adoption">recent acquisition of Red Hat</a>, not many people outside of those communities would have associated IBM with open source.</p> <p>But the truth of the matter is that we&#8217;ve been involved with open source from the beginning. Before many of the companies you associate with open source were even founded, we were backing emerging communities, contributing to the development of open source licenses, and advocating for open governance and open standards.</p> <p>So, how did we get where we are? And what do we envision as the future of open source? Let&#8217;s explore these topics and more. Read on!</p> <img src="https://dw1.s81c.com/developer-static-pages/open/en/story/images/Oldschool.png" style="float:right;display:inline;padding-left:45px;padding-bottom:45px;" /> <h4 id="section-before-open" style="padding-top:0;padding-bottom:1rem;"><span class="underlined-header">Before open source was cool</span></h4> <p>IBM was one of the earliest champions of open source, backing influential communities like Linux, Apache, and Eclipse, pushing for open licenses, open governance, and open standards.</p> <p>Our first notable interaction with open source software was when a number of IBM engineers began contributing to Linux (yes, the Linux on which Red Hat Enterprise Linux is built). In the late 1990s, IBM supported Linux with patent pledges, a $1 billion investment of technical and other resources, and helped to <a href="https://www.linuxfoundation.org/about/">establish the Linux Foundation</a> in 2000.</p> <p>In 1999, we helped to create the Apache Software Foundation (ASF), contributing thousands of line of code and dedicated resources to <a href="https://apache.org/foundation/press/pr_1999_06_30.html">support the Apache Web Server projects</a>. As a founding member, we helped shape the license and governance, served in leadership roles, and contributed to numerous projects. Today, there are over 300+ open source initiatives at ASF, and the scope has widened from the original HTTP server project to include web technologies, XML, web services, document processing, mobile, cloud, big data and analytics, serverless, and messaging. Clearly, we helped create a safe place to collaborate and innovate in the open. </p> <p>We led the creation of the Eclipse Foundation in 2004. We seeded the Eclipse project with a significant code contribution, dedicated developers, and legal help in writing the licenses. Now, there are over 400+ projects at Eclipse covering a broad spectrum of technology. We credit Eclipse&#8217;s success to its open governance, giving open source developers a neutral place to collaborate and innovate in the open.</p> <p>In its infancy, IBM recognized the promise of open source and contributed thousands of lines of code, people hours, and money to ensure that foundations were set up in a way that supported open governance and standards. On a broad scale, IBM&#8217;s participation in these and well over a thousand other projects and communities set the tone for open source adoption among enterprises across the globe.</p> </div> </div> </div> </div> </div> </div> <!-- PAGE SECTION --> <div class="page-section" style="display:flex;"> <div style="width:75vw; background: transparent url(https://dw1.s81c.com/developer-static-pages/open/en/story/images/throughtime.png) no-repeat left / cover;"></div> <div class="bx--grid"> <div class="bx--row"> <div class="bx--col-md-6 bx--col-lg-8"> <h4 id="section-contributions"><span class="underlined-header">Open source contributions through time</span></h4> </div> </div> </div> </div> <!-- PAGE SECTION --> <div class="page-section"> <div class="bx--grid"> <div class="bx--row"> <div class="bx--offset-lg-2 bx--col-lg-8 bx--offset-md-1 bx--col-md-6"> <div class="bx--row"> <div class="bx--col-lg-12"> <p>As the success of the Linux Foundation, Apache Foundation, and Eclipse Foundations grew, IBM ramped up and broadened the scope of our open source involvement. For the past decade, we&#8217;ve focused on developing the latest open source projects and communities and sharing in the work under open governance.</p> <p>Here are some of the highlights of our history in open source, as they relate to the technologies we most care about. </p> <h5 id="section-linux"><span class="underlined-subheader">Linux kernel</span></h5> <p>After helping establish the Linux Foundation, IBM continued to lead in the Linux community by investing hundreds of engineering resources over the years in the Linux kernel and in many of the now more than 80 collaborative projects under the Linux Foundation. In 2005, we cofounded the <a href="https://www.openinventionnetwork.com/about-us/fact-sheet/">Open Invention Network</a>, which protects open source projects against attacks by patent holders. Being able to develop without fear of legal repercussions helped to speed Linux kernel development.</p> <p>IBM has always been a <a href="https://developer.ibm.com/blogs/ibm-and-the-linux-kernel/">strong technical contributor to the Linux kernel</a>, ranking in the top ten corporate contributors and having maintainers for a wide range of Linux-kernel subsystems. While your contributions support our own offerings, we also contribute strongly in the areas of scalability, robustness, security, and other areas that benefit the Linux ecosystem.</p> <p><a href="https://developer.ibm.com/technologies/linux/">Learn more abouto Linux on IBM Developer <svg fill="#0062FF" focusable="false" preserveAspectRatio="xMidYMid meet" xmlns="http://www.w3.org/2000/svg" width="18" height="16" viewBox="0 0 32 24" aria-hidden="true" style="will-change: transform;"> <path d="M18 6L16.6 7.4 24.1 15 3 15 3 17 24.1 17 16.6 24.6 18 26 28 16z"></path><title>Arrow right</title> </svg> </a></p> <h5 id="section-java"><span class="underlined-subheader">Java</span></h5> <p>IBM was an <a href="https://developer.ibm.com/blogs/ibm-and-java-looking-forward-to-the-future/">early adopter and contributor to Java</a>, reaching back to the earliest days. We were instrumental in helping shape the Java language and runtime, and J2EE specifications along with Sun Microsystems. Over the years, we have helped drive Java to open source that resulted in OpenJDK becoming the premier open source Java. </p> <p>More recent contributions to the Java community include:</p> <ul> <li>our Java runtime, J9, a high-performance, low-memory footprint Java Virtual Machine (JVM) optimized for the cloud, contributed to the Eclipse Foundation as the <a href="https://www.eclipse.org/openj9/">Eclipse OpenJ9</a> incubator</li> <li>our OpenLiberty runtime for Java EE and MicroProfile applications, contributed to <a href="https://openliberty.io">openliberty.io</a>. This runtime is the basis for WebSphere.</li> </ul> <p>We <a href="https://developer.ibm.com/blogs/ibm-and-java-the-next-25-years/">continue to help lead</a> and contribute to establishing the Eclipse Foundation Specification Process that is to replace the former Java Community Process (JCP) for Jakarta EE.</p> <p><a href="https://developer.ibm.com/technologies/java/">Learn more about Java on IBM Developer <svg fill="#0062FF" focusable="false" preserveAspectRatio="xMidYMid meet" xmlns="http://www.w3.org/2000/svg" width="18" height="16" viewBox="0 0 32 24" aria-hidden="true" style="will-change: transform;"> <path d="M18 6L16.6 7.4 24.1 15 3 15 3 17 24.1 17 16.6 24.6 18 26 28 16z"></path><title>Arrow right</title> </svg> </a></p> <h5 id="section-ai"><span class="underlined-subheader">Machine learning, deep learning, and AI</span></h5> <img src="https://dw1.s81c.com/developer-static-pages/open/en/story/images/ai360.png" style="float:right;display:inline;padding-left:45px;padding-bottom:45px;" /> <p>IBM has created AI platforms for years and contributed to various projects in the open source AI community. Recently, we&#8217;ve ramped up our internal focus on creating and open sourcing ML and DL data sets and projects.</p> <p>IBM partners with the Open Neural Network eXchange (ONNX) to support and develop open formats for ML and donated the Egeria project to the ODPi consortium in 2018 to define APIs and descriptors for metadata sharing without imposing a single tool or repository to manage all metadata.</p> <p>In 2019, IBM joined the LF AI to focus our energies on helping to build trust in AI. Our focus now is on building trust into AI systems, and we believe this is best done in an open source context. IBM became a premier member at LF AI in 2023.</p> <p>In 2020, IBM donated three key open source technologies for AI to the Linux Foundation:</p> <ul> <li> The <a href="https://lfaidata.foundation/projects/ai-fairness-360/">AI Fairness 360 toolkit</a>, an open source software toolkit that can help detect and remove bias in machine learning models</li> <li>The <a href="https://lfaidata.foundation/projects/ai-explainability-360/">AI Explainability 360 toolkit</a>, an open source library that supports the interpretability and explainability of data sets and machine learning models.</li> <li>The <a href="https://lfaidata.foundation/projects/adversarial-robustness-toolbox/">Adversarial Robustness Toolbox</a> for rapid crafting and analysis of attack and defense methods for machine learning models</li> </ul> <p>In the larger ML community, IBMers are actively engaged in Kubeflow, KServe, CodeFlare, PyTorch, and many other important projects, serving as committers and contributors.</p> <p><a href="https://developer.ibm.com/technologies/artificial-intelligence/">Learn more about AI on IBM Developer <svg fill="#0062FF" focusable="false" preserveAspectRatio="xMidYMid meet" xmlns="http://www.w3.org/2000/svg" width="18" height="16" viewBox="0 0 32 24" aria-hidden="true" style="will-change: transform;"> <path d="M18 6L16.6 7.4 24.1 15 3 15 3 17 24.1 17 16.6 24.6 18 26 28 16z"></path><title>Arrow right</title> </svg> </a></p> <h5 id="section-cloud"><span class="underlined-subheader">Cloud</span></h5> <p>The move to cloud-based deployment models in the past decade was sped along by a number of high-priority open source cloud projects. A few IBM contributions in this area include our work with OpenStack, Cloud Foundry, and OpenWhisk. </p> <p><strong>Cloud Foundry</strong></p> <img src="https://dw1.s81c.com/developer-static-pages/open/en/story/images/cloudfoundry.png" style="float:right;display:inline;padding-left:45px;padding-bottom:45px;" /> <p><a href="https://www.cloudfoundry.org/">Cloud Foundry</a> is an open source cloud application platform for developing and deploying enterprise cloud applications. <a href="https://developer.ibm.com/blogs/history-cloud-foundry-1">IBM became involved with Cloud Foundry</a> right after its release by VMware in 2010 and immediately galvanized a group of developers to work on it. </p> <p>As we do with all projects that we become actively involved with, we began to push for an open governance model for Cloud Foundry. So while IBM engineers contributed to the Cloud Foundry code base, our leadership team worked with other companies, included Pivotal and SAP, to <a href="https://developer.ibm.com/blogs/history-cloud-foundry-2/">create the Cloud Foundry Foundation</a> in 2016.</p> <p><strong>OpenStack</strong></p> <p><a href="https://www.openstack.org">OpenStack</a> is an open source infrastructure-as-a-service project deployed in both public and private clouds for provisioning virtual servers and other resources. IBM became involved with OpenStack in 2012 with several developers of our Open Source Development team working on OpenStack&#8217;s many projects. IBM engineers contributed features geared toward enterprise use cases, with emphasis on identity management, security, and interoperability.</p> <p><strong>OpenWhisk</strong></p> <img src="https://dw1.s81c.com/developer-static-pages/open/en/story/images/Openwhisk.png" style="float:right;display:inline;padding-left:45px;padding-bottom:45px;" /> <p>After IBM Research began working on a serverless platform in 2015, we quickly made the decision to open source the platform under open governance so that we could grow a vibrant community and ecosystem around it. </p> <p>In February 2016, we open sourced our serverless platform implementation and named it OpenWhisk. As interest in OpenWhisk grew, we then worked with partners like Adobe and Red Hat to establish <a href="https://openwhisk.apache.org/">Apache OpenWhisk</a> as an incubating project in November 2016. In July 2019, Apache OpenWhisk went from being an Incubating Project to <a href="https://developer.ibm.com/blogs/apache-openwhisk-community-graduation/">being a Top-Level Project</a> at the Apache Software Foundation.</p> <p><a href="https://developer.ibm.com/depmodels/cloud/">Visit the Cloud hub on IBM Developer <svg fill="#0062FF" focusable="false" preserveAspectRatio="xMidYMid meet" xmlns="http://www.w3.org/2000/svg" width="18" height="16" viewBox="0 0 32 24" aria-hidden="true" style="will-change: transform;"> <path d="M18 6L16.6 7.4 24.1 15 3 15 3 17 24.1 17 16.6 24.6 18 26 28 16z"></path><title>Arrow right</title> </svg> </a></p> <h5 id="section-containers"><span class="underlined-subheader">Containers</span></h5> <p>Cloud and containers go hand in hand, and open source containers projects helped to speed the adoption of containers in enterprises.</p> <p><strong>First Docker and OCI . . . </strong></p> <img src="https://dw1.s81c.com/developer-static-pages/open/en/story/images/Docker.png" style="float:right;display:inline;padding-left:45px;padding-bottom:45px;" /> <p>Docker launched in 2013 and IBMers quickly became active contributors to the project. Like we always do when we join a project, we encouraged Docker towards open governance and, in 2015, became a founding sponsor of the Open Container Initiative. Docker contributed libcontainer and the Docker image and transfer format specification to seed the newly created initiative. IBM has been one of the top contributors to the OCI since its formation and one of our top engineers was recognized for his contribution and leadership by being elected to the <a href="https://opencontainers.org/community/overview/#technical-oversight-board-tob">OCI Technical Oversight Board</a>.</p> <p><strong>Then Kubernetes and CNCF . . .</strong></p> <img src="https://dw1.s81c.com/developer-static-pages/open/en/story/images/Kubernetes.png" style="float:right;display:inline;padding-left:45px;padding-bottom:45px;" /> <p>Around the same time that Docker was moving towards open governance, the Kubernetes project was gaining traction in the community as an open source container orchestration system. In July 2015, following close on the heels of the Open Containers Initiative launch, we helped launch the <a href="https://www.cncf.io/">Cloud Native Computing Foundation</a> to provide an open governance model for Kubernetes.</p> <p>The CNCF organization (and Kubernetes) have thrived, growing to over 20 projects, including Kubernetes, etcd, rkt, fluentd, containerd, Helm, and more. Our developers serve as committers and contributors on a number of these projects.</p> <p><strong>Finally, Istio</strong></p> <img src="https://dw1.s81c.com/developer-static-pages/open/en/story/images/Istio.png" style="float:right;display:inline;padding-left:45px;padding-bottom:45px;" /> <p>Our partnership with Google on Docker, Kubernetes, and CNCF bore additional fruit with the Istio project. IBM and Google joined forces with Lyft to collaborate on a merger of IBM&#8217;s <a href="https://www.ibm.com/blogs/cloud-archive/2016/06/amalgam8-integration-fabric-microservices-cloud/">Amalgam8</a>, Lyft&#8217;s Envoy, and Google&#8217;s Service Control. The result was the <a href="https://istio.io/">Istio project</a>, a first-class abstraction for routing and policy management for cloud native microservices. Our goal is to eventually move Istio to CNCF to ensure open governance for this important and increasingly popular project. </p> <p>These are just a few highlights of where we’ve invested our time, money, and resources into open source container platforms. We’re involved as committers on other container projects, including the Knative project that enables serverless capabilities to Kubernetes. </p> <p><a href="https://developer.ibm.com/technologies/containers/">Visit the Containers hub on IBM Developer <svg fill="#0062FF" focusable="false" preserveAspectRatio="xMidYMid meet" xmlns="http://www.w3.org/2000/svg" width="18" height="16" viewBox="0 0 32 24" aria-hidden="true" style="will-change: transform;"> <path d="M18 6L16.6 7.4 24.1 15 3 15 3 17 24.1 17 16.6 24.6 18 26 28 16z"></path><title>Arrow right</title> </svg> </a></p> <h5 id="section-blockchain"><span class="underlined-subheader">Blockchain</span></h5> <p>In 2015, IBM recognized the incredible potential of blockchain technology, the same technology that underlies Bitcoin. After some research, we realized that none of the existing blockchain technology platforms was really suitable for the enterprise. So, IBM set forth to build a new blockchain platform with enterprise requirements in mind &mdash; one that could be used in highly regulated environments.</p> <p>We recognized that a technology this important should not be controlled by any single vendor, so we worked with the Linux Foundation to help establish <a href="https://www.hyperledger.org/">Hyperledger</a>, the fastest-growing project at the LF, ever. IBM contributed 44 thousand lines of code and established the first of the Hyperledger projects, Hyperledger Fabric, under open governance. Since then, there have been nine additional projects incubated at Hyperledger.</p> <p><a href="https://github.com/hyperledger/fabric">Hyperledger Fabric</a> was the first to be incubated, the first to graduate to “Active” status, and the first to reach a 1.0.0 release – in June 2017. There have been nearly 300 engineers representing 40 companies that have contributed to these quarterly releases of HyperLedger Fabric. This is a testament to the value of developing open source under open governance.</p> <p><a href="https://developer.ibm.com/technologies/blockchain/">Visit the Blockchain hub on IBM Developer <svg fill="#0062FF" focusable="false" preserveAspectRatio="xMidYMid meet" xmlns="http://www.w3.org/2000/svg" width="18" height="16" viewBox="0 0 32 24" aria-hidden="true" style="will-change: transform;"> <path d="M18 6L16.6 7.4 24.1 15 3 15 3 17 24.1 17 16.6 24.6 18 26 28 16z"></path><title>Arrow right</title> </svg> </a></p> <h5 id="section-iot"><span class="underlined-subheader">IoT</span></h5> <p>In 2008, as the Internet of Things gained traction, MQTT &mdash; a publish-subscribe messaging model developed by an IBMer &mdash; gained popularity. The first MQTT broker was <a href="https://developer.ibm.com/blogs/open-source-ibm-mqtt-the-messaging-protocol-for-iot/">open sourced that year</a> and 4 years later, the <a href="https://www.eclipse.org/paho/">Eclipse Paho project</a> was launched to offer open source MQTT client libraries for Java, C, JavaScript, and Python. </p> <p>In late 2014, MQTT Version 3.1.1 became an OASIS standard, paving the way in 2016 for MQTT to become an ISO standard. In 2017, MQTT became the leading protocol for connecting IoT devices. This technology continues to grow under the leadership of the Eclipse Foundation. Read how <a href="https://developer.ibm.com/blogs/open-source-ibm-mqtt-the-messaging-protocol-for-iot/">MQTT is the leading protocol for connecting IoT devices</a>.</p> <p><a href="https://developer.ibm.com/technologies/iot/">Visit the IoT hub on IBM Developer <svg fill="#0062FF" focusable="false" preserveAspectRatio="xMidYMid meet" xmlns="http://www.w3.org/2000/svg" width="18" height="16" viewBox="0 0 32 24" aria-hidden="true" style="will-change: transform;"> <path d="M18 6L16.6 7.4 24.1 15 3 15 3 17 24.1 17 16.6 24.6 18 26 28 16z"></path><title>Arrow right</title> </svg> </a></p> <h5 id="section-node"><span class="underlined-subheader">Node.js and JavaScript</span></h5> <p>IBMers have been <a href="https://developer.ibm.com/blogs/ibm-and-nodejs-our-history-present-and-future/">involved with the Node.js project</a> since 2012, contributing millions of lines of code, serving in leadership roles across the community, and generally pushing the project and the community forward through our involvement.</p> <p>In 2014 when a fork in the Node.js project threatened the viability of the project, IBM worked with both factions to resolve the situation by bringing Node.js development under open governance via the Node.js Foundation. Now that the Node.js and JavaScript communities have come together <a href="https://developer.ibm.com/blogs/join-openjs-foundation-javascript-node-home/">under the OpenJS Foundation</a>, our developers continue to serve in leadership positions on the Technical Steering committee, as leaders of Working Groups, and as committers and contributors to the projects. Learn about <a href="https://developer.ibm.com/blogs/ibm-and-nodejs-our-history-present-and-future/">IBM and Node.js: Our past, present, and future</a>.</p> <p>Another notable JavaScript project from IBM is <a href="https://nodered.org/">Node-RED</a>, a project that enables low-code application development. We open sourced Node-RED in 2013, and since then a large user-community has grown around it, with over 1 million downloads, 1,700 third-party add-on nodes available, and an ever growing contributor-community helping to drive the project forward.In October 2016, Node-RED became one of the founding projects of the JS Foundation. In September of 2019, Node-RED released its <a href="https://developer.ibm.com/blogs/introducing-node-red-version-1-0/">1.0 release</a>.</p> <p>Learn more about Node-RED and <a href="https://developer.ibm.com/blogs/open-source-ibm-node-red-low-code-visual-development-tool/">its history in open source</a>.</p> <p><a href="https://developer.ibm.com/languages/node-js/">Visit the Node.js hub on IBM Developer <svg fill="#0062FF" focusable="false" preserveAspectRatio="xMidYMid meet" xmlns="http://www.w3.org/2000/svg" width="18" height="16" viewBox="0 0 32 24" aria-hidden="true" style="will-change: transform;"> <path d="M18 6L16.6 7.4 24.1 15 3 15 3 17 24.1 17 16.6 24.6 18 26 28 16z"></path><title>Arrow right</title> </svg> </a></p> <h5 id="section-quantum"><span class="underlined-subheader">Quantum</span></h5> <img src="https://dw1.s81c.com/developer-static-pages/open/en/story/images/qiskit.png" style="float:right;display:inline;padding-left:45px;padding-bottom:45px;" /> <p>While IBM has been active in building quantum technology for years, in 2016, we decided to provide open access to real quantum computers via the cloud. We then released <a href="https://qiskit.org/">Qiskit</a> to access those quantum computers. Today, Qiskit is the most popular open source quantum SDK. With Qiskit, developers can work with quantum processors at the level of extended quantum circuits, operators, and primitives, leveraging IBM Quantum systems for research, education, and business. IBM is actively developing and promoting the creation of an <a href="https://www.ibm.com/quantum/ecosystem">ecosystem around this open-source project</a>.</p> <p>As quantum technology continues to evolve, the open-source quantum projects and the developers who contribute to those communities will continue to drive value in shaping the technology and its use.</p> <p><a href="https://developer.ibm.com/depmodels/quantum-computing/">Visit the Quantum hub on IBM Developer <svg fill="#0062FF" focusable="false" preserveAspectRatio="xMidYMid meet" xmlns="http://www.w3.org/2000/svg" width="18" height="16" viewBox="0 0 32 24" aria-hidden="true" style="will-change: transform;"> <path d="M18 6L16.6 7.4 24.1 15 3 15 3 17 24.1 17 16.6 24.6 18 26 28 16z"></path><title>Arrow right</title> </svg> </a></p> </div> </div> </div> </div> </div> </div> <!-- PAGE SECTION --> <div class="page-section color-bg-black"> <div class="bx--grid"> <div class="bx--row"> <div class="bx--offset-lg-2 bx--col-lg-8 bx--offset-md-1 bx--col-md-6"> <div class="bx--row" id="section-future"> <div class="bx--col-lg-12"> <h4><span class="underlined-header">Envisioning an open future for the enterprise</span></h4> <p>Hopefully you&#8217;ve gathered that our goal when we get involved in open source is to bring a project under open governance so that it can quickly reap the benefits of an active, diverse developer ecosystem. </p> <p>A trend we&#8217;re seeing now is that organizations themselves are becoming open source in the way that they operate as a development organization. As organizations change the way they develop code, infusing open source principles and practices into the development process, the technology that&#8217;s created is better, more innovative, and more secure.</p> <p>Part of this openness is the way that teams across different communities are coming together. For instance, the Node.js and JavaScript communities recently joined their foundations so that they can create better, more closely aligned and scalable projects.</p> <p>We&#8217;ll be in the fray, continuing to lead by example in the way we infuse open source into our own products and technology, the open way we lead our teams, and how we interact transparently with our clients. We are excited to be a part of this renaissance and to continue to push this trend through our leadership and our commitment to open governance and standards.</p> </div> </div> </div> </div> </div> </div> </section> </div> </div> </div> </div> <div class="container_footer"> <footer role="contentinfo" aria-label="IBM Developer Footer"> <!-- developer footer here --> <div id="code-footer"class="code-footer"> <div class="ibm-logo"> <a href="https://www.ibm.com/"> <svg class="Footer-module--logo--3otJM" width="81" height="32" xmlns="http://www.w3.org/2000/svg"><g fill-rule="evenodd"><path d="M0 32h15.689v-2.038H0zM0 27.721h15.689v-2.038H0zM4.483 23.442h6.724v-2.037H4.483zM4.483 19.164h6.724v-2.038H4.483zM4.483 14.885h6.724v-2.037H4.483zM4.482 10.606h6.724V8.568H4.482zM0 6.327h15.689V4.29H0zM0 2.049h15.689V.011H0zM17.93 29.963V32h16.504a8.521 8.521 0 0 0 5.54-2.037H17.93zM17.93 25.683v2.038h23.914a8.535 8.535 0 0 0 .85-2.038H17.93zM22.412 23.442h6.724v-2.037h-6.724zM40.124 17.126H22.412v2.038H41.77a8.62 8.62 0 0 0-1.645-2.038M22.413 12.848v2.036h17.786a8.612 8.612 0 0 0 1.644-2.037h-19.43zM42.693 6.327a8.447 8.447 0 0 0-.85-2.037H17.93v2.037h24.763zM39.974 2.049a8.521 8.521 0 0 0-5.54-2.037H17.93v2.037h22.044zM22.412 10.606h6.724V8.568h-6.724zM35.453 10.606h7.29a8.603 8.603 0 0 0 .248-2.038h-7.538v2.038zM35.453 21.405v2.037h7.538c0-.703-.09-1.384-.248-2.037h-7.29zM57.457 0H44.825v2.038h13.34zM44.826 32h11.21v-2.038h-11.21zM44.826 27.72h11.21v-2.038h-11.21zM49.309 23.439h6.727v-2.038h-6.727zM49.309 19.159h6.727v-2.038h-6.727zM69.488 32h11.21v-2.038h-11.21zM69.488 27.72h11.21v-2.038h-11.21zM69.488 23.439h6.726v-2.038h-6.726zM69.487 19.159h6.726v-2.038h-6.726zM69.488 14.879h6.726V12.84H63.606l-.707 2.038h5.903l.686-1.94zM61.916 12.84H49.31v2.039h6.726v-1.94l.686 1.94h5.903zM76.213 8.56H65.091l-.707 2.038h11.83zM68.06 0l-.706 2.038h13.344V0zM62.757 32l.72-2.038h-1.432zM61.254 27.72h3.015l.72-2.038h-4.455zM59.743 23.44h6.037l.72-2.039h-7.476zM58.232 19.159h9.06l.719-2.038h-10.5zM49.309 10.598h11.83l-.707-2.038H49.309zM65.868 6.318h14.83V4.28H66.576zM58.947 4.28H44.826v2.038h14.828z"></path></g></svg> </a> <div class="slogan"> <a href="https://www.ibm.com/opensource"> <span> <span>Build</span> <span>Smart<svg focusable="false" preserveAspectRatio="xMidYMid meet" xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32" aria-hidden="true" style="will-change: transform;"><polygon points="24.59 16.59 17 24.17 17 2 15 2 15 24.17 7.41 16.59 6 18 16 28 26 18 24.59 16.59"></polygon><title>Arrow down</title></svg></span> </span> <span> <span>Build</span> <span>Secure<svg focusable="false" preserveAspectRatio="xMidYMid meet" xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32" aria-hidden="true" style="will-change: transform;"><polygon points="16 4 6 14 7.41 15.41 15 7.83 15 30 17 30 17 7.83 24.59 15.41 26 14 16 4"></polygon><title>Arrow up</title></svg></span> </span> </a> </div> </div> <div class="footer-links"> <div class="bx--grid"> <div class="bx--row"> <div class="bx--col-sm-2 bx--col-md-3 bx--col-lg-3"> <ul> <li class="heading">IBM Developer</li> <li><a href=https://developer.ibm.com/about/>About</a></li> <li><a href=https://developer.ibm.com/feedback/>Site Feedback &amp; FAQ</a></li> <li><a href=https://developer.ibm.com/terms/third-party-notice/>Third-party notice</a></li> </ul> </div> <div class="bx--col-sm-2 bx--col-md-3 bx--col-lg-3"> <ul class="tr"> <li class="heading">Follow Us</li> <li><a href=https://twitter.com/IBMDeveloper/>Twitter</a></li> <li><a href=https://www.linkedin.com/showcase/developerworks/>LinkedIn</a></li> <li><a href=https://www.facebook.com/IBMDeveloper>Facebook</a></li> <li><a href=https://www.youtube.com/channel/UCUm6InQvGI9-6vo1teGWINA>YouTube</a></li> </ul> </div> <div class="bx--col-sm-2 bx--col-md-3 bx--col-lg-3"> <ul> <li class="heading">Explore</li> <li><a href=https://developer.ibm.com/newsletters/>Newsletters</a></li> <li><a href=https://developer.ibm.com/patterns/>Code patterns</a></li> <li><a href=https://developer.ibm.com/articles/>Articles</a></li> <li><a href=https://developer.ibm.com/tutorials/>Tutorials</a></li> <li><a href=https://www.ibm.com/opensource/open-projects/>Open source projects</a></li> <li><a href=https://developer.ibm.com/videos/>Videos</a></li> <li><a href=https://developer.ibm.com/events/>Events</a></li> </ul> </div> <div class="bx--col-sm-2 bx--col-md-3 bx--col-lg-3"> <!--ul class="tr"> <li class="heading">Select a language</li> <li><a href=https://developer.ibm.com/>English</a></li> <li><a href=https://developer.ibm.com/br/>Português</a></li> <li><a href=https://developer.ibm.com/es/>Español</a></li> </ul --> </div> </div> </div> </div> </div> <!-- end of default footer --> <div class="code_content__wrap"> </div> </div> <!-- ibm footer here --> <div aria-label="IBM Global Footer" class="dw-footer" id="dw-footer"> <div class="code_content__wrap"> <div class="dw-footer-corporate-links"> <ul> <li><a href=https://developer.ibm.com/community/>Community</a></li> <li><a href=https://www.ibm.com/privacy/us/en/ target=_blank rel=noopener noreferrer>Privacy</a></li> <li><a href=https://developer.ibm.com/terms/ibm-developer-terms-of-use/>Terms of use</a></li> <li><a href=https://www.ibm.com/accessibility/us/en/ target=_blank rel=noopener noreferrer>Accessibility</a></li> <li id="ibm-truste-cp"><a onclick="truste.eu.clickListener();return false;" href="#">Cookie preferences</a></li> </ul> </div> <div id="ibm-footer-locale-selector"></div> </div> </div> <button value="Site feedback" id="Site-feedback-btn-id" onclick="KAMPYLE_ONSITE_SDK.showForm(260)" form="myform" style="position: fixed; cursor: pointer; font-weight: 300; font-size: 16px; line-height: 26px; outline: 0px; text-align: center; height: 32px; padding: 0px 16px; right: 0px; top: 150px; bottom: auto; z-index: 800; transform: rotate(-90deg); transform-origin: 100% 100%; background-color: rgb(255, 255, 255); border: 1px solid rgb(15, 98, 254); color: rgb(15, 98, 254); margin: 0px !important;"> Site feedback </button> </footer> </div> <div id="notificationDrawer"></div> <style> #modal-k7naq0vevup .bx--modal-container, #challengeModal .bx--modal-container{ max-width: 980px !important; padding:0 !important; height: 75% !important; } #challengeModal .bx--modal-container{ height: 90% !important; max-height: 90% !important; border-color: #41a8a5; } #modal-k7naq0vevup .bx--modal-content, #challengeModal .bx--modal-content{ margin-bottom: 0; height: 100%; } #modal-k7naq0vevup .bx--modal-container iframe, #challengeModal .bx--modal-container iframe{ height:100%; } </style> <div id="challengeModal"> <div id="challengeIframeWrap"> <div class="challenge--modal-header"> <button class="challenge--modal-close" type="button" data-modal-close aria-label="close modal" data-modal-primary-focus> <svg class="challenge--modal-close__icon" width="10" height="10" viewBox="0 0 10 10" xmlns="http://www.w3.org/2000/svg"> <title>Close Modal</title> <path d="M6.32 5L10 8.68 8.68 10 5 6.32 1.32 10 0 8.68 3.68 5 0 1.32 1.32 0 5 3.68 8.68 0 10 1.32 6.32 5z" fill-rule="nonzero"/> </svg> </button> </div> <div class="challenge--modal-content"> <iframe id="challengeIframe" src="about:blank" frameborder="0" scrolling="no"></iframe> </div> </div> </div> </div><!-- #page --> <script defer type='text/javascript' src='https://www.ibm.com/opensource/site-content/themes/ibmdeveloper-carbon/js/navigation.js?ver=20151217' id='lucio-navigation-defer-js'></script> <script type='text/javascript' src='https://www.ibm.com/opensource/wp-includes/js/wp-embed.min.js?ver=5.6.14' id='wp-embed-js'></script> <script> var $searchTrigger = document.getElementById('header-search-module'), $modalInstance = undefined, $developerBurger = document.getElementById('developer-burger'), $codeSideNav = document.getElementById('developerNavTriggersMobile'), $codeSideNavCover = document.getElementById('code--side-nav-cover'), $announcementClose = document.getElementById('announcement_close'), $notificationDrawer = document.getElementById('notificationDrawer'); if($notificationDrawer != null){ $notificationDrawer.addEventListener('click', function(event) { event.preventDefault(); $btn = ibmcode.getClosest(event.target, 'button'); if( $btn && $btn.classList.contains('bx--toast-notification__close-button') ){ ibmcode.getClosest($btn, 'div.bx--toast-notification').remove(); } }); } if($announcementClose != null){ $announcementClose.addEventListener('click', function(event) { $elm = document.getElementById('code_announcement'); $elm.parentNode.removeChild($elm); //document.body.classList.remove('no-fixed-menu'); ibmcode.setCookie('Code_Annouce_Closed','true',0); }); } if($searchTrigger != null){ //this can be way more efficient $searchTrigger.addEventListener('click', function(event) { $btn = ibmcode.getClosest(event.target, 'button'); if( $btn && $btn.classList.contains('GlobalSearch-module--search-button--search') ){ if($searchTrigger.querySelector('input[type="text"]').value.trim() != "" && !($searchTrigger.classList.contains('GlobalSearch-module--hidden')) ){ $searchTrigger.querySelector('form').submit(); } $searchTrigger.classList.remove('GlobalSearch-module--hidden'); $searchTrigger.querySelector('input[type="text"]').focus(); $searchTrigger.querySelector('.GlobalSearch-module--search-button--close').classList.remove('GlobalSearch-module--hidden'); }else if( $btn && $btn.classList.contains('GlobalSearch-module--search-button--close') ){ $searchTrigger.classList.add('GlobalSearch-module--hidden'); $searchTrigger.querySelector('input[type="text"]').value= ""; $searchTrigger.querySelector('.GlobalSearch-module--search-button--close').classList.add('GlobalSearch-module--hidden'); } // window.location.href = 'https://www.ibm.com/opensource?s='; }); } if($developerBurger != null && $codeSideNavCover != null && $codeSideNav != null){ $developerBurger.addEventListener('click', function(event) { //bx--side-nav--expanded if( document.body.classList.contains('bx--side-nav--opened') ){ document.body.classList.remove('bx--side-nav--opened'); }else{ document.body.classList.add('bx--side-nav--opened'); } }); $codeSideNavCover.addEventListener('click', function(event) { //bx--side-nav--expanded if( document.body.classList.contains('bx--side-nav--opened') ){ document.body.classList.remove('bx--side-nav--opened'); }else{ document.body.classList.add('bx--side-nav--opened'); } }); $codeSideNav.addEventListener('click', function(event) { //bx--side-nav--expanded $letsFix = event.target.closest('.bx--side-nav__submenu'); if($letsFix){ if($letsFix.classList.contains('noclick')){ return; } if($letsFix.getAttribute("aria-expanded") === 'false'){ $letsFix.setAttribute("aria-expanded", "true"); }else{ $letsFix.setAttribute("aria-expanded", "false"); } } }); } $codeLeftNav = document.getElementById('code--side-nav'); if($codeLeftNav != null){ $codeLeftNav.addEventListener('click', function(event) { event.preventDefault(); var menuDropDown = event.target.closest('button.bx--side-nav__submenu'); if(menuDropDown){ if(menuDropDown.classList.contains('noclick')){ return; } if(menuDropDown.getAttribute("aria-expanded") === 'false'){ menuDropDown.setAttribute("aria-expanded", "true"); }else{ menuDropDown.setAttribute("aria-expanded", "false"); } } }); } var openMenuItem = null; var openSearch = null; document.addEventListener('click', function (event) { //are we clicking on a link leaving the site? // if(event.target.tagName.toLowerCase() === 'a'){ // var patt = new RegExp(/(?<!ibm|redhat)\.(?:com|biz|org)/g); // var res = patt.test(event.target.href); // if(res){ // //we need to rewrite the url to the ibm redirect page // event.target.href = 'https://www.ibm.com/links?url=' + event.target.href; // } // } //we need a click event here to close the search if its open and there is a if(openMenuItem != event.target){ if(openMenuItem != null){ openMenuItem.setAttribute("aria-expanded", "false"); openMenuItem = null; } } //check to see if the last link we clicked on had a class of ".mylastaction" if ( ibmcode.getClosest(event.target, 'a.mylastaction') ) { var newTarg = ibmcode.getClosest(event.target, 'a.mylastaction'); var elmID = newTarg.getAttribute('id'); if(elmID != null){ localStorage.setItem("mylastaction", elmID); } } //did we click on a state object that we want to keep track of? if( ibmcode.getClosest(event.target, '[data-csm="true"]') ){ var csmTarg = ibmcode.getClosest(event.target, '[data-csm="true"]'); var csmTargID = csmTarg.getAttribute('id'); if(csmTargID != null){ var btoaUrl = btoa(window.location.pathname); if(csmTarg.dataset.clicked == undefined){ csmTarg.dataset.clicked = 'true'; if(sessionStorage.getItem(btoaUrl) == null){ //create an array to store the clicked element csmTargArray = []; }else{ //get the session storage item for use csmTargArray = sessionStorage.getItem(btoaUrl); csmTargArray = csmTargArray.split(","); } //check to make sure the value is not in the array before adding if(!csmTargArray.includes(csmTargID)){ csmTargArray.push(csmTargID); } //now store it sessionStorage.setItem(btoaUrl, csmTargArray); }else{ csmTargArray = sessionStorage.getItem(btoaUrl); csmTargArray = csmTargArray.split(","); //find the clicked element in the array and remove it index = csmTargArray.indexOf(csmTargID); if (index > -1) { csmTargArray.splice(index, 1); sessionStorage.setItem(btoaUrl, csmTargArray); } csmTarg.removeAttribute('data-clicked'); }; //if the array is empty, se should delete it if(csmTargArray.length < 1){ sessionStorage.removeItem(btoaUrl); } } } // console.info(event); if ( event.target.classList.contains('bx--snippet__icon') ) { // Get the parent with the `.accordion` class var parentBtn = ibmcode.getClosest(event.target, '.bx--snippet-button'); var codeBlock = parentBtn.previousElementSibling.querySelectorAll('code'); if(codeBlock[0]){ ibmcode.copyText(codeBlock[0]); } } if ( ibmcode.getClosest(event.target, '.bx--header__menu-title') ) { event.preventDefault(); var newTarg = ibmcode.getClosest(event.target, '.bx--header__menu-title'); if(newTarg === openMenuItem && openMenuItem != null){ openMenuItem.setAttribute("aria-expanded", "false"); openMenuItem = null; return } openMenuItem = newTarg; openMenuItem.setAttribute("aria-expanded", "true"); } if ( ibmcode.getClosest(event.target, '.GlobalLogin-module--container') ) { if(event.target.className === 'bx--header__menu-item'){ return; } event.preventDefault(); var newTarg = ibmcode.getClosest(event.target, '.GlobalLogin-module--container'); if(newTarg === openMenuItem && openMenuItem != null){ openMenuItem.setAttribute("aria-expanded", "false"); openMenuItem = null; return; } openMenuItem = newTarg; openMenuItem.setAttribute("aria-expanded", "true"); } if(event.target.id === "challengeModal" || event.target.classList.contains('challenge--modal-close') || event.target.closest('.challenge--modal-close')){ toggleChallengeModal('',true); return; } //we clicked on a challenge and we need to trigger the modal for taking it if ( event.target.closest('.developer--card.ibmcode_challenges.loggedin') ) { event.preventDefault(); $challengeURL = event.target.closest('.developer--card.ibmcode_challenges.loggedin').querySelector('.developer--card__block_link').href; toggleChallengeModal($challengeURL); } //we clicked on a card that wants to display in a modal if ( event.target.closest('.developer--card.modal') ) { event.preventDefault(); console.info(event.target); $challengeURL = event.target.closest('.developer--card.modal').querySelector('.developer--card__block_link').href; toggleChallengeModal($challengeURL); } }, false); function set_size($size){ document.querySelector('#challengeIframeWrap .challenge--modal-content').style.height = $size; } function toggleChallengeModal($challengeURL,$close,$completedChallenge){ if($close === true){ document.body.classList.remove("showing-modal"); $iFrame = document.getElementById('challengeIframe'); $iFrame.src = 'about:blank'; }else{ $challengeModal = document.getElementById('challengeModal'); $iFrame = document.getElementById('challengeIframe'); // $iFrameHeight = $iFrame.contentWindow.document.body.offsetHeight; $iFrame.src = $challengeURL; document.body.classList.add("showing-modal"); } if(typeof($completedChallenge) === "string"){ var completedChallengeCards = document.querySelectorAll('a[href="/challenges/'+$completedChallenge+'/"]'); for (var i = 0; i < completedChallengeCards.length; i++) { completedChallengeCards[i].parentNode.classList.add('completed'); } } } var domReadyCallback = function(){ if(ibmcode.getCookie('developer_session_id') == null){ var xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.onreadystatechange = function() { if (this.readyState == 4 && this.status == 200) { document.getElementById("demo").innerHTML = this.responseText; } }; xhr.open("GET", "https://developer.ibm.com/middleware/v1/whoami", true); xhr.send(); } //get cookie for the last recordable action // var lastAction = ibmcode.getCookie('mylastaction'); var lastAction = localStorage.getItem('mylastaction'); localStorage.removeItem('mylastaction'); // console.info(lastAction); // ibmcode.eraseCookie('mylastaction'); //now clear the action if(lastAction != null){ var targElm = document.getElementById(lastAction); console.info(targElm); targElm.classList.remove("mylastaction"); setTimeout(function(){ targElm.click(); }, 750); } //look at the session state elements for the current page and trigger them. var btoaUrl = btoa(window.location.pathname); var pageState = sessionStorage.getItem(btoaUrl); if(pageState != null){ pageState = pageState.split(","); pageState.forEach(function(entry) { var targElm = document.getElementById(entry); setTimeout(function(){ targElm.click(); targElm.dataset.clicked = 'true'; }, 750); }); // var targElm = document.getElementById(pageState); // setTimeout(function(){ targElm.click(); }, 750); } // Handler when the DOM is fully loaded //handling the loazy load var lazyloadCardImages, lazyloadContentImages; if ("IntersectionObserver" in window) { //this will handle the card background images styled by css lazyloadCardImages = document.querySelectorAll(".lazycards"); var imageCardObserver = new IntersectionObserver(function(entries, observer) { entries.forEach(function(entry) { if (entry.isIntersecting) { var image = entry.target; image.classList.remove("lazycards"); imageCardObserver.unobserve(image); } }); }); lazyloadCardImages.forEach(function(image) { imageCardObserver.observe(image); }); //this will handle the images used in the body of our content types lazyloadContentImages = document.querySelectorAll(".lazycontent"); var imageContentObserver = new IntersectionObserver(function(entries, observer) { entries.forEach(function(entry) { if (entry.isIntersecting) { var image = entry.target; image.src = image.dataset.src; image.classList.remove("lazycontent"); imageContentObserver.unobserve(image); } }); }); lazyloadContentImages.forEach(function(image) { imageContentObserver.observe(image); }); } //function that runs to set the same height of card elements setTimeout(function() { $sameHeightWidgets = document.querySelectorAll('[data-widget="setsameheight"]'); ibmcode.widgetSetSameHeight($sameHeightWidgets,true); }, 250); var resizeTimer; ibmcode.addEvent(window,'resize',function(){ clearTimeout(resizeTimer); resizeTimer = setTimeout(function() { ibmcode.widgetSetSameHeight($sameHeightWidgets,true); }, 250); }); //this javascript needs to get added to the page only when a user is logged in and auth is true }; if ( document.readyState === "complete" || (document.readyState !== "loading" && !document.documentElement.doScroll) ) { domReadyCallback(); } else { document.addEventListener("DOMContentLoaded", domReadyCallback); } /* adding functions to handle sending in favoriting */ // ibmcode.postAjax = function(url, data, callback) </script> <script type="text/javascript" src="/Ao4iSHfd/FsE/-t7/Cc8do2x49d/9fOQ8Lzh2zSr/ODZq/MH/hBVSsddA8C"></script><link rel="stylesheet" type="text/css" href="/Ao4iSHfd/FsE/-t7/Cc8do2x49d/2t/Uw9d/Cx/hCVDNOGhVZ"><script src="/Ao4iSHfd/FsE/-t7/Cc8do2x49d/2t/Uw9d/Pl/I-KQ5URQYq" async defer></script><div id="sec-overlay" style="display:none;"><div id="sec-container"></div></div></body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10