Hi All,

The "cloud market" when Apache Libcloud was conceived in 2010 is very
different to how it looks today, some trends we are seeing

1- IaaS (our compute API) is one of many features in public clouds. Amazon,
Azure and GCP have 100's of individual services now [1]. Text-to-speech,
functions, automation, API gateways, it's impossible to keep up
2- Private Clouds have seen a continued decline but are still popular [2]
3- The advent of containers means it is now "easier" to deploy an
application to multiple clouds
4- The big 3 public clouds, Amazon, Azure and Google make up most of the
cloud market [3] if you compare Apache Libcloud downloads with boto (the
native AWS Python client) downloads, it's a massive delta. Boto is in the
top 10 most popular PyPi packages

In terms of users, I've pulled 3 snapshots of PyPi downloads, January 2016,
2017 and 2018 [4]
Annual downloads of Apache-Libcloud have seen a slight increase, but the
2016 - 2,778,687
2017 - 2,958,591

Python 2.7 represented 90% of users in 2017 and 64% in 2018. This is a huge
drop. [4]

*I would like to propose a drastic (depending on your perspective) plan to
take Apache Libcloud through to 2020*

*1. Focus on specific use cases*

Lack of consistency between implementations of the base class means in
practicality it's difficult to have abstracted applications.

Apache Libcloud should (imo) come with a toolbox of utilities to both
demonstrate and validate cloud abstraction use cases, such as:
- Migrating storage objects from Cloud X to Cloud Y
- Splitting an application workload across multiple clouds

*2. Improve performance by adopting asyncio*

In almost all use cases, Libcloud would benefit from non-blocking calls.
Listing VM's requires multiple calls for the pages, uploading storage
objects can be done in multiple futures, deleting DNS records would be
better done in async.

I'm suggesting we introduce a Python 3.5+ only API, move to
requests-futures or aiohttp for the base HTTP client. Yes, *I am suggesting
we drop Python 2 support in the future*.

I've been researching how we could make this switch without breaking 64% of
our users..
Pip now has a way to choose versions based on Python runtimes
https://hackernoon.com/phasing-out-python-runtimes-gracefully-956f112f33c4
We could have apache-libcloud 3+  for Python 3.5 users and then maintain
2.3 patches for Python 2.7 and 3.4 users.

I think we can come up with a way of continuing to maintain the existing
code base for 2.7 users but move forward with a new API for async and
Python 3.5+ users.

The downloads [4] show that Python 2.7 is still the majority of users but
this is declining quickly and by 2020 the tables will have turned. We need
to be ready for that.

*3. Change our positioning on dependencies of 3rd party packages*

We aren't seeing enough community contribution to keep up with the rapid
pace at which Microsoft, Amazon and Google are changing their APIs. Google
have been contributing to their driver for years. We haven't seen that from
either Amazon or Microsoft. Alibaba have contributed to theirs, many other
cloud providers have contributed, but it seems to be after APIs are
changed, not in advance.


* 1. Docker is another example, that API changes almost every month. The
driver we have is unstable and doesn't support API versioning correctly. *
Please consider these options,

I would like to hear from users how you are currently using Apache Libcloud
and how you are using it

NB: I have mentioned Azure, AWS and GCP a lot in this thread, mainly
because they represent +80% of the cloud market [3]. This is a community
developed project, has no affiliation to those vendors and these are my
opinions, not those of the project.

[1] https://www.amazonaws.cn/en/products/
[2]
http://www.computerweekly.com/news/450280991/IDC-research-predicts-gradual-decline-in-on-premise-hardware-spend-as-cloud-adoption-rises
[3]
https://www.crn.com.au/news/microsoft-ate-into-aws-market-share-in-q4-481240
[4]
https://docs.google.com/spreadsheets/d/17KEs8Lr_bCQ1XI7QzqmNVe279d7-vPIYPer2VFtSo_Q/edit?usp=sharing

Reply via email to