Making Platform as a Service offerings comparable - Ecosystem profiles for portability matching.
A no-standards approach for application portability.
Currently 95 PaaS vendor profiles. Profiles are encoded as JSON files.
The current web interface can be viewed at PaaSify.it
Any errors? Important missing properties? Suggestions? Contribute.
I encourage everyone to submit corrections or additions in order to keep the profiles accurate and up-to-date. In any case, please add evidence for the information so I can verify your changes.
I am also interested in direct cooperation with vendors in order to keep the profiles at first hand and spot-on. Contact me if you are interested to supply a vendor verified profile.
Contribute either via pull request, create an issue or send me an email.
The code below shows a sample profile. The profile specification is beta and the properties are subject to change.
{
"name": "SomePaas",
"revision": "2014-04-24",
"vendor_verified": "2013-07-02",
"url": "http://someurl.com",
"status": "production",
"status_since": "2012-07-15",
"type": "Generic",
"hosting": {
"public": true, "private": false
},
"pricing": [
{ "model": "fixed", "period": "monthly" }
],
"qos": {
"uptime": 99.8,
"compliance": [
"SSAE 16 Type II", "ISAE 3402 Type II"
]
},
"scaling": {
"vertical": true, "horizontal": true, "auto": false
},
"runtimes": [
{ "language": "java", "versions": [ "1.7", "1.6" ] }
],
"middleware": [
{ "name": "tomcat", "runtime": "java", "versions": [ "6.0.35" ] }
],
"frameworks": [
{ "name": "rails", "runtime": "ruby", "versions": [ "4.0.0" ] },
{ "name": "django", "runtime": "python", "versions": [ "1.5.1" ] }
],
"services": {
"native": [
{ "name": "mongodb", "description": "", "type": "datastore", "versions": [ "1.8" ] }
],
"addon": [
{ "name": "mongolab", "url": "https://mongolab.com/", "description": "", "type": "datastore" }
]
},
"extensible": false,
"infrastructures": [
{
"continent": "NA",
"country": "US",
"region": "Virginia",
"provider": "AWS"
}
]
}
The official name of the PaaS offering.
Date
or DateTime
of the profile's last update.
This may be set to the Date
when the profile was officially created or audited by the vendor.
The URL leading to the PaaS' webpage.
The current status of the offering. This may be one of the following lifecycle stages:
alpha
= Work in progress or early test version
beta
= In private or public beta testing
production
= Live and generally available
eol
= Discontinued or integrated into another offering (End of life)
Date
of the last status transition.
Positioning of the PaaS in between IaaS and SaaS. Currently allowed categories:
SaaS-centric, Generic, IaaS-centric
An array of all available billing options.
The pricing model of the PaaS. Currently allowed values:
free, fixed, metered, hybrid
The billing period. Currently allowed values:
daily, monthly, annually
Can be omitted if the pricing model is free
.
The guaranteed monthly uptime by the provider.
Currently a simple string array of compliance standards that are fulfilled by the PaaS.
An object including three boolean properties for characterizing the scaling capabilities:
vertical
= Can you scale the instance sizes, e.g. ram?
horizontal
= Can you scale the number of instances?
auto
= Is the PaaS capable of scaling any of the above properties automatically?
An object that describes the different provided hosting styles of the PaaS.
Values can be public
for a publicly hosted service and private
for a service that can be deployed on premise, too.
The runtimes an application can be written in. Defined as an array of objects.
"runtimes": [
{ "language": "java", "versions": [ "1.7", "1.6" ] },
{ "language": "ruby", "versions": [ "1.9.3", "2.0.0" ] }
]
This section must only include languages that are officially supported by the vendors. Languages added via community buildpacks must not be added. Extensibility is modeled by the property extensible. In order to allow exact matching, the language keys are restricted. Currently allowed keys are:
apex, clojure, cobol, dotnet, erlang, go, groovy, haskell, java, lua, node, perl, php, python, ruby, scala
Note: Due to common parlance the Node framework is listed as language being the de facto standard for server-side scripting with JavaScript.
A string array containing the supported runtime versions. Wildcards *
may be used for branches or even marking all major versions as supported (e.g. *.*
).
An array of preinstalled or fully supported middleware stacks.
"middleware": [
{ "name": "tomcat", "runtime": "java", "versions": [ "6", "7" ] },
{ "name": "nginx", "versions": [ "1.6" ] }
]
Should be the official name in lowercase. Currently not restricted.
(Optional) The associated runtime of the middleware product.
A string array containing the supported middleware versions.
An array of officially and fully supported frameworks.
"frameworks": [
{ "name": "rails", "runtime": "ruby", "versions": [ "4.0.0" ] },
{ "name": "django", "runtime": "python", "versions": [ "1.5.1" ] }
]
Should be the official name in lowercase. Currently not restricted.
The associated runtime of the framework.
A string array containing the supported framework versions.
"services": {
"native": [
{ "name": "mongodb", "type": "datastore", "description": "", "versions": [ "1.8" ] }
],
"addon": [
{ "name": "mongolab", "url": "https://mongolab.com/", "description": "", "type": "datastore" }
]
}
Native services or core services are provided and hosted by the PaaS vendor as integral part of the offering. Most often this will be performance critical core services like datastores.
Add-on services are provided by external vendors and may or may not be hosted in the same infrastructure as the PaaS. However, we only categorize services as add-ons if they can be provisioned directly from the PaaS and will be billed as additional part of the platform fee.
A category the service does fit in. Currently allowed keys are: tbd Maybe make it an array of types.
datastore, search, worker, analytics, payment, media, messaging, other, devops
The infrastructures an application can be deployed to. Defined as an array of objects.
"infrastructures": [
{
"continent": "EU",
"country": "IE",
"region": "Dublin",
"provider": "AWS"
}
]
The continent must be encoded with the following continent codes:
AF = Africa, AS = Asia, EU = Europe, NA = North America, OC = Oceania, SA = South America
The country codes must conform to the two-letter codes defined in ISO 3166-1.
The property region can be used to further specify the location of the datacenter. This field is freeform and may specify a region or even the city the datacenter is located in.
This optional field may specify the name of the external IaaS provider used by the PaaS vendor, e.g. Amazon Web Services.