<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;">
<div>
<div>
<div>
<div><font face="Calibri,sans-serif">Hey all,</font></div>
<div><font face="Calibri,sans-serif"><br>
</font></div>
<div><font face="Calibri,sans-serif">I wanted to put on paper Rackspace's thoughts and plans regarding tooling for OpenStack and Rackspace clouds as
<i>we haven't been clear enough on this with the broader OpenStack community</i>. Some quick context; I'm a Dev Manager in Developer Experience, and help manage SDK development here at Rackspace.</font></div>
<div><font face="Calibri,sans-serif"><br>
</font></div>
<div><font face="Calibri,sans-serif"><b>tl;dr: Rackspace's strategy is to build Rackspace SDKs based on pure Openstack SDKs, and avoid least-common-denominator multi-cloud libraries as much as possible in order to provide an excellent user experience.</b></font></div>
<div><font face="Calibri,sans-serif"><br>
</font></div>
<div><font face="Calibri,sans-serif">If we go back in time, Rackspace endorsed a number of multi-cloud libraries for Rackspace customers, in addition to some in-house developed dual OpenStack/Rackspace SDKs. Fog, jclouds, and pkgcloud were all multi-cloud,
 while pyrax, openstack.net, php-opencloud, and gophercloud were all developed in-house with a mix of OpenStack and Rackspace capabilities.</font></div>
<div><font face="Calibri,sans-serif"><br>
</font></div>
<div><font face="Calibri,sans-serif">When we looked at this holistically, it became clear this was an exceptionally confusing story for a customer trying to use these tools; it was equally bad for both Rackspace customers and Openstack customers. As a result
 of this we formed two opinions that have helped shape our strategy:</font></div>
<ol>
<li><font face="Calibri,sans-serif">Distance Rackspace from multi-cloud libraries</font></li><li><font face="Calibri,sans-serif">Clearly separate OpenStack implementations from Rackspace implementations</font></li></ol>
<div><font face="Calibri,sans-serif">I'll explain both of these opinions further to help understand the ramifications.</font></div>
<div><font face="Calibri,sans-serif"><br>
</font></div>
<div><font face="Calibri,sans-serif"><b>Distance Rackspace from multi-cloud libraries</b></font></div>
<div><font face="Calibri,sans-serif"><br>
</font></div>
<div><font face="Calibri,sans-serif">Pointing users (regardless of whether they are OpenStack or Rackspace) at a multi-cloud library will never be as consistent of an experience as it would be to native tooling. There are a number of examples of why: the inability
 to consistently release tooling updates coordinated with major releases, inconsistency of documentation across different sdks, or existence of confusing abstractions across types of clouds. All of these can inhibit adoption and create confusion for the users
 who do try and use these tools.</font></div>
<div><font face="Calibri,sans-serif"><br>
</font></div>
<div><font face="Calibri,sans-serif">Further, we believe that that core benefit of multi-cloud doesn't bear out in reality. There are so many differences between major cloud providers (AWS, OpenStack, Google, etc) that portability of tooling is the least of
 your concerns in actually migrating, and we don't believe that federating applications across clouds is sufficient justification to make the experience worse in the default case.</font></div>
<div><font face="Calibri,sans-serif"><br>
</font></div>
<div><font face="Calibri,sans-serif">We haven't had a ton of traction yet on this opinion, but it's one we're trying to work towards.</font></div>
<div><font face="Calibri,sans-serif"><br>
</font></div>
<div><font face="Calibri,sans-serif"><b>Clearly separate OpenStack implementations from Rackspace implementations</b></font></div>
<div><font face="Calibri,sans-serif"><br>
</font></div>
<div><font face="Calibri,sans-serif">In a number of our tools, the OpenStack implementation is a peer in the SDK to the Rackspace implementation. This creates a natural tension between the pure OpenStack implementation and the Rackspace one. If it's Rackspace
 controlled, (i.e. under our GitHub organization) does that mean we're not receptive to changes from others? How do we add maintainers when it's under our GitHub Orgs? Further, the documentation for these tools may have biases that need not be present.</font></div>
<div><font face="Calibri,sans-serif"><br>
</font></div>
<div><font face="Calibri,sans-serif">To that end, we felt extracting the OpenStack capabilities and moving this code into a pure OpenStack library was a must do. We've already started this for a number of our projects: Openstack.net [1] is almost pure OpenStack
 now, and is in its own GitHub org. Similarly, we're working on Go [2] and PHP [3], and hope to get Ruby split out soon as well. Our python efforts are even more formalized; We contribute development resources to the python-openstacksdk project which is a python
 SDK within OpenStack. We want to do this for Javascript as well, but perhaps Michael Krotscheck's efforts for a Javascript SDK should be the basis for this rather than our own initiatives.</font></div>
<div><font face="Calibri,sans-serif"><br>
</font></div>
<div><font face="Calibri,sans-serif">We still have more work to do here, but the goal is to have pure OpenStack SDKs implement the entirety of the OpenStack API, and then have Rackspace SDKs that separately add on top of the OpenStack SDK as appropriate for
 our API surface.</font></div>
<div><font face="Calibri,sans-serif"><br>
</font></div>
<div><font face="Calibri,sans-serif"><b>Closing</b></font></div>
<div><font face="Calibri,sans-serif"><br>
</font></div>
<div><font face="Calibri,sans-serif">None of this is perfect; rather, it reflects our current thinking and how we're acting. Having a great experience for OpenStack developers can only be great for OpenStack and that aligns with our needs to serve our own customers.</font></div>
<div><font face="Calibri,sans-serif"><br>
</font></div>
<div><font face="Calibri,sans-serif">Please don't hesitate to ask questions, or raise concerns.</font></div>
<div><font face="Calibri,sans-serif"><br>
</font></div>
<div><font face="Calibri,sans-serif">Ken</font></div>
<div><font face="Calibri,sans-serif"><br>
</font></div>
<div><font face="Calibri,sans-serif">[1] https://github.com/openstacknetsdk/openstack.net</font></div>
<div><font face="Calibri,sans-serif">[2] https://github.com/gophercloud/gophercloud</font></div>
<div><font face="Calibri,sans-serif">[3] https://github.com/php-opencloud/openstack</font></div>
</div>
<div style="color: rgb(0, 0, 0); font-family: Calibri, sans-serif; font-size: 14px;">
<div id="MAC_OUTLOOK_SIGNATURE"></div>
</div>
</div>
</div>
</body>
</html>