# Internet of Things Platforms for Academic Research and Development: A Critical Review
## 2 Internet of Things Platforms
### Open Source Platforms
The distinctive feature of FIWARE is its openness: any developer can in fact contribute to the FIWARE generic enabler catalogue, providing new features or alternative implementations of existing ones; this led to the development of a vibrant ecosystem. The Kaa 0.X platform [38] is the first generation of the Kaa platform, released under an open source license. Kaa 0.X can be installed locally on a dedicated server, but also supports remote installation on the Amazon Web Services (AWS) platform for a fee, typically depending on the number of devices to be supported. The Kaa 0.X architecture is composed of three key elements: (1) the Kaa server, that has a role similar to the context broker in the FIWARE platforms: it provides the back-end support required to connect and integrate users, applications and devices; (2) Kaa extensions, that provide additional features not available in the server; (3) endpoint software development kits (SDKs), that is software libraries that enable communication and data exchange between the server and hardware platforms. The latest Kaa 0.x version currently available, 0.10, supports overall thirteen hardware platforms using one or more programming languages among C, C++, Objective-C and Java. The supported platforms include both desktop and mobile operating systems, such as Linux, Windows, Android and iOS, and development boards such as Intel Edison, EXP8266 and Texas Instruments CC3200. Kaa supports different communication protocols, including HTTP, extensible messaging and presence protocol (XMPP) and MQTT protocol; although not all protocols are available for all SDKs, Kaa provides a common architecture to transfer data between end-points and server, based on data logs that are collected at each device and then transferred to the server using one of the supported protocols. A major feature in Kaa is the support of a large number of external back-ends and databases: MongoDB, Oracle NoSQL, Kafka, Cassandra are among the supported databases. Logs collected from endpoints are sent to a database by means of software appenders provided in Kaa, and can be later accessed for processing. On the other hand, no built-in data processing capability is available on Kaa, with the sole exception of supporting the transformation of raw data into time series. The Kaa 0.X platform also does not provide any built-in visualization tools. Kaa provides a wide range of options for installation. The quickest solution is to use a prepackaged sandbox made available in a virtual machine file, that can be downloaded and imported in a virtual engine like Virtual Box, providing a full installation without need to compile or install individual packages. Kaa modules can also be installed from binary packages using the Linux packet manager; finally, a full installation from sources using Maven can be performed with a single shell command. The documentation consists in the Github code repository readme file and in the documentation pages on the platform website. The website provides installation instructions, a tutorial showing how to build a toy app, and succinct information on platform features and components. It should be noted that the development of Kaa 0.X was arrested in 2017,when the second generation Kaa platform was released, under the name Kaa Enterprise. Kaa Enterprise was however not released under an open source license, although a free pricing tier supporting up to five devices/endpoints using a PaaS approach is available. Although the Kaa 0.X is still available for download [39], the lack of future development should be taken into account when evaluating whether to adopt this platform for academic R and D activities. Lelylan [40] is an open platform with an architecture based on multiple micro-services that provide key functionalities. These include communications with devices, security and exposing devices to the external world.