Argot. A language for the Internet of Things.
The Argot software development kit is a series of tools and libraries designed to help software developers build languages for the Internet of Things. It has been developed over ten years, and is specifically designed for embedded environments. Argot is released under an open source license, and is free to use in both non-commercial and commercial projects. Source code is hosted at the Google code site http://code.google.com/p/argot/
Argot is the first application to offer an extensible communication method that can grow and change over time. Argot provides the extensibility of XML and XML Schema, the ability to describe and encode binary data structures, and is inherently 'version-aware' at individual types.
Argot is built upon the unique idea that every device or application will contain a metadata dictionary. The metadata dictionary comprises all the types of information that a particular device can communicate with other devices. This allows each Argot device or application to negotiate directly with its peers, and mutually agree on the information that they are able to use to have a meaningful exchange. This fundamental change of moving the metadata knowledge into the application or device, rather than keeping it externally, is the most important aspect of Argot.
By embedding the metadata into applications, Argot has created a system which mimics human communication. It is analogous to two polylingual people meeting for the first time and negotiating which language they will use to communicate. In some cases, one of the speakers may have a limited vocabulary in a particular language, while the other is an expert. When this occurs, the two speakers will agree on a particular group of words from at least one language that both can use to communicate effectively. If one of these speakers meet a third person, then the new pair of speakers may agree to use a totally different language for their communication. In a similar way, Argot allows two computers to negotiate directly about the individual data structures they will use to communicate. This creates a highly flexible system that is open to continuous and simple change as devices and applications develop over time.
Fundamentally, Argot is a metalanguage designed to describe the structure of a binary data stream. By describing binary data, Argot is working with the basic building blocks of computer communication. However, Argot goes further and uses it's own metalanguage to describe the structure of itself.
The core of Argot is a set of 39 meta statements which are used to define each other via mutual recursion. This forms a directed cyclic type graph with no external definitions, and creates the equivalent of a Rosetta Stone from which all other information can be defined. Argot's 39 core meta statements constitute a meta dictionary, which is used as the basis to build the definitions of application data types. These statements may also be extended to create new ways to define the structure of information. Argot versions each data type individually to ensure maximum flexibility when change is required.
As Argot versions individual data types, it allows applications to negotiate with each other based on partial type systems. The Argot data dictionary design allows applications to dynamically discover the set of common data types required for communication. The ability to negotiate based on partial type systems adds to Argot's ability to adapt to change.
An Argot file or message is capable of storing the application data, the dictionary which describes the structure of the data, and the meta dictionary which describes itself and the structure of the application dictionary. This allows a device to send a message with an embedded data dictionary which describes only the data types used in the specific message.
As an Argot dictionary has a binary format, an application dictionary may only require a couple of kilobytes of memory. This allows it be stored on the smallest of devices.
Argot in Use
Argot is an application layer type system that has numerous potential applications. Used alone it can be employed for storing application data in files. However, Argot was mainly designed for use in distributed computing, such as the Internet of Things.
As Argot is an application level meta data and encoding solution, it requires a session/transport layer such as message queuing (e.g. MQTT, MQ Series, Tibco or other). Alternatively, it may be used directly over UDP or TCP. Over time there will be a number of releases providing extensions for various transport layers. The first of these will be MQTT.
Argot has been in development for over ten years by the creator David Ryan. It was built after years of interest in distributed computing, and investigation of the limitations of software like CORBA, XML, SOAP, HTTP and others. Over the years, it has seen a number of stops and starts, and been through a number of iterations. Argot is being relaunched in May 2013, as it's unique design is perfectly suited to become a language of the Internet of Things.
The current version of Argot is currently being prepared for release in the coming months. If you have questions, bugs, or encouragement please send David an email, or raise an issue at the Google Code page.