# Interface description language

> Mediated Wiki article. Canonical URL: https://mediated.wiki/source/Interface_description_language
> Markdown URL: https://mediated.wiki/source/Interface_description_language.md
> Source: https://en.wikipedia.org/wiki/Interface_description_language
> Source revision: 1351786469
> License: Creative Commons Attribution-ShareAlike 4.0 International (https://creativecommons.org/licenses/by-sa/4.0/)

{{Short description|Computer language used to describe a software component's interface}}
{{more citations needed|date=March 2022}}
[[File:Component-based-Software-Engineering-example2.png|thumb|right|Representation of different software components for performing a hypothetical holiday reservation in [UML](/source/Unified_Modeling_Language)]]

An '''interface description language''' or '''interface definition language''' ('''IDL''') is a generic term for a language that lets a program or object written in one language communicate with another program written in an unknown language. IDLs are usually used to describe data types and interfaces in a language-independent way, for example, between those written in C++ and those written in Java.

IDLs are commonly used in remote procedure call software. In these cases the machines at either end of the ''link'' may be using different operating systems and computer languages. IDLs offer a bridge between the two different systems.

Software systems based on IDLs include [Sun Microsystems](/source/Sun_Microsystems)' [Sun RPC](/source/Sun_RPC), [The Open Group](/source/The_Open_Group)'s [Distributed Computing Environment](/source/Distributed_Computing_Environment), the [IBM System Object Model](/source/IBM_System_Object_Model), the [Object Management Group](/source/Object_Management_Group)'s [Common Object Request Broker Architecture](/source/Common_Object_Request_Broker_Architecture) (CORBA) (which implements OMG IDL, an IDL based on DCE/RPC) and [Data Distribution Service](/source/Data_Distribution_Service), [Mozilla](/source/Mozilla)'s [XPCOM](/source/XPCOM),  [Microsoft RPC](/source/Microsoft_RPC) (which evolved into [Component Object Model](/source/Component_Object_Model) (COM) and [Distributed Component Object Model](/source/Distributed_Component_Object_Model) (DCOM)), [Facebook](/source/Facebook)'s [Apache Thrift](/source/Apache_Thrift) and [Web Services Description Language](/source/Web_Services_Description_Language) (WSDL) for Web services.

== Examples ==
<!-- MAINTAIN ALPHABETIC ORDER PLEASE -->
* [https://developer.android.com/guide/components/aidl AIDL]: [Java](/source/Java_(programming_language))-based, for [Android](/source/Android_(operating_system)); supports local and remote procedure calls, can be accessed from native applications by calling through [Java Native Interface](/source/Java_Native_Interface) (JNI)
* [Apache Thrift](/source/Apache_Thrift): from [Apache](/source/Apache_Software_Foundation), originally developed by [Facebook](/source/Facebook)
* [Avro IDL](/source/Apache_Avro): for the Apache Avro system
* [ASN.1](/source/ASN.1)
* [Cap'n Proto](/source/Cap'n_Proto): created by its{{clarify|The pronoun is ambiguous, grammatically referring to Cap'n Proto (the subject), although it seems intended to refer to Protocol Buffers; see my earlier edit that was reverted. |date=January 2026}} former maintainer, avoids some of the perceived shortcomings of [Protocol Buffers](/source/Protocol_Buffers).
* [Concise Data Definition Language](/source/Concise_Data_Definition_Language) (CDDL, RFC 8610):<ref>{{Cite journal|title=Concise Data Definition Language (CDDL): A Notational Convention to Express Concise Binary Object Representation (CBOR) and JSON Data Structures|url=https://www.rfc-editor.org/rfc/rfc8610|access-date=2022-05-24|website=RFC Editor|year=2019 |doi=10.17487/RFC8610 |language=en|last1=Birkholz |first1=H. |last2=Vigano |first2=C. |last3=Bormann |first3=C. |s2cid=195857027 |url-access=subscription }}</ref> A Notation for [CBOR](/source/CBOR) and [JSON](/source/JSON) data structures
* [CortoScript](/source/CortoScript): Describe data and/or interfaces for systems that require [Semantic interoperability](/source/Semantic_interoperability)
* [Etch](/source/Etch_(protocol)): Cisco's Etch Cross-platform Service Description Language
* [Extensible Data Notation](/source/Extensible_Data_Notation) (EDN): [Clojure](/source/Clojure) data format, similar to JSON
*[FlatBuffers](/source/FlatBuffers): Serialization format from [Google](/source/Google) supporting zero-copy deserialization
* [Franca IDL](/source/Franca_IDL): the open-source Franca interface definition language
* [https://fuchsia.dev/fuchsia-src/get-started/learn/fidl/fidl FIDL]: Interface description language for the [Fuchsia Operating System](/source/Fuchsia_(operating_system)) designed for writing app components in [C](/source/C_(programming_language)), [C++](/source/C%2B%2B), [Dart](/source/Dart_(programming_language)), [Go](/source/Go_(programming_language)) and [Rust](/source/Rust_(programming_language)).<ref>{{Cite web|title=FIDL Overview|url=https://fuchsia.dev/fuchsia-src/concepts/fidl/overview|access-date=2022-02-23|website=Fuchsia|language=en}}</ref> 
* [IDL specification language](/source/IDL_specification_language): the original Interface Description Language
* [https://docs.imandra.ai/ipl IPL]: Imandra Protocol Language
* [JSON](/source/JSON) Web-Service Protocol ([JSON-WSP](/source/JSON-WSP))
* [Lightweight Imaging Device Interface Language](/source/Lightweight_Imaging_Device_Interface_Language)
* [Microsoft Interface Definition Language](/source/Microsoft_Interface_Definition_Language) (MIDL): the Microsoft extension of OMG IDL to add support for [Component Object Model](/source/Component_Object_Model) (COM) and [Distributed Component Object Model](/source/Distributed_Component_Object_Model) (DCOM)
* [OMG IDL](/source/OMG_IDL): standardized by [Object Management Group](/source/Object_Management_Group), used in [CORBA](/source/CORBA) (for DCE/RPC services) and [DDS](/source/Data_Distribution_Service) (for [data modeling](/source/data_modeling)), also selected by the W3C for exposing the DOM of XML, HTML, and CSS documents
* [OpenAPI Specification](/source/OpenAPI_Specification): a standard for [Web APIs](/source/Web_API), used by [Swagger](/source/Swagger_(software)) and other technologies. 
* [Open Service Interface Definitions](/source/Open_Service_Interface_Definitions)
* [Protocol Buffers](/source/Protocol_Buffers): [Google](/source/Google)'s IDL
* [RESTful Service Description Language](/source/RESTful_Service_Description_Language) (RSDL)
* [https://smithy.io Smithy]: An AWS-invented protocol-agnostic interface definition language.
* Specification Language for [Internet Communications Engine](/source/Internet_Communications_Engine) (Ice: [Slice](/source/Internet_Communications_Engine))
* [Universal Network Objects](/source/Universal_Network_Objects): [OpenOffice.org](/source/OpenOffice.org)'s component model
* [Web Application Description Language](/source/Web_Application_Description_Language) (WADL)
* [Web IDL](/source/Web_IDL) by [WHATWG](/source/WHATWG): can be used to describe interfaces that are intended to be implemented in web browsers
* [Web Services Description Language](/source/Web_Services_Description_Language) (WSDL)
* [XCB](/source/XCB): X protocol description language for [X Window System](/source/X_Window_System)
* Cross Platform Interface Description Language ([XPIDL](/source/XPIDL)): Mozilla's way to specify XPCOM interfaces

== See also ==
* [Component-based software engineering](/source/Component-based_software_engineering)
* [Interface-based programming](/source/Interface-based_programming)
* [Java Interface Definition Language](/source/Java_Interface_Definition_Language)
* [List of computing and IT abbreviations](/source/List_of_computing_and_IT_abbreviations)
* [Universal Interface Language](/source/Universal_Interface_Language)
* [User interface markup language](/source/User_interface_markup_language)

==References==
{{Reflist}}

== External links ==
* [https://resources.sei.cmu.edu/library/asset-view.cfm?assetid=5939 Documenting Software Architecture: Documenting Interfaces] (PDF)
* [https://www.omg.org/spec/IDL OMG Specification of OMG IDL]
* [http://www.omg.org/gettingstarted/omg_idl.htm OMG Tutorial on OMG IDL]

{{Programming paradigms navbox}}

Category:Data modeling languages
Category:Remote procedure call
Category:Specification languages
Category:Domain-specific programming languages

---
Adapted from the Wikipedia article [Interface description language](https://en.wikipedia.org/wiki/Interface_description_language) by Wikipedia contributors ([contributor history](https://en.wikipedia.org/wiki/Interface_description_language?action=history)). Available under [Creative Commons Attribution-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-sa/4.0/). Changes may have been made.
