# Middleware

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

{{short description|Computer software that provides services to software applications}}

'''Middleware''' is a type of [computer software](/source/computer_software) program that provides services to software applications beyond those available from the [operating system](/source/operating_system). It can be described as "software glue".<ref>{{Cite web |title=Middleware conference |url=https://middleware-conf.github.io/ |access-date=2023-12-16 |website=middleware-conf.github.io |language=en-us |quote=Middleware is a distributed-system software that resides between applications and underlying platforms (operating systems; databases; hardware), and/or ties together distributed applications, databases or devices. Its primary role is to coordinate and enable communication between different layers or components while isolating much of the complexity of distribution into a single, well tested and well understood system abstraction.}}</ref><ref name="MW-00">{{Cite web|title=What is Middleware? |url=http://www.middleware.org/whatis.html |publisher=Defining Technology |work=Middleware.org |year=2008 |access-date=2013-08-11 |url-status=unfit |archive-url=https://web.archive.org/web/20120629211518/http://www.middleware.org/whatis.html |archive-date=June 29, 2012 }}</ref>

Middleware makes it easier for [software developer](/source/software_developer)s to implement communication and input/output, so they can focus on the specific purpose of their application. It gained popularity in the 1980s as a solution to the problem of how to link newer applications to older legacy systems, although the term had been in use since 1968.<ref>{{Cite web |last=Gall |first=Nick |date=July 30, 2005 |title=Origin of the term ''middleware'' |url=http://ironick.typepad.com/ironick/2005/07/update_on_the_o.html |access-date=May 21, 2008 |language=en-US}}</ref>

==In distributed applications==
{{Main|Middleware (distributed applications)}}
thumb|Software architecture: Middleware

The term is most commonly used for software that enables communication and management of data in [distributed application](/source/distributed_application)s. An [IETF](/source/IETF) workshop in 2000 defined middleware as "those services found above the [transport](/source/transport_layer) (i.e. over TCP/IP) layer set of services but below the application environment" (i.e. below application-level [APIs](/source/application_programming_interface)).{{citation needed|date=May 2024}} In this more specific sense ''middleware'' can be described as the hyphen ("-") in ''[client-server](/source/client-server)'', or the ''-to-'' in ''[peer-to-peer](/source/peer-to-peer)''. Middleware includes [web server](/source/web_server)s, [application server](/source/application_server)s, [content management system](/source/content_management_system)s, and similar tools that support application development and delivery.<ref name="EtzkornIntro17">{{cite book |url=https://books.google.com/books?id=AZgnDwAAQBAJ&pg=PT45 |title=Introduction to Middleware: Web Services, Object Components, and Cloud Computing |author=Etzkorn, L. H. |publisher=CRC Press |pages=4–5 |year=2017 |isbn=9781498754101}}</ref>

ObjectWeb defines middleware as: "The software layer that lies between the operating system and applications on each side of a distributed computing system in a network."<ref>{{Cite web|first=Sacha|last=Krakowiak|url=http://middleware.objectweb.org/|title=What's middleware?|access-date=2005-05-06|publisher=ObjectWeb.org|url-status=dead|archive-url=https://web.archive.org/web/20050507151935/http://middleware.objectweb.org/|archive-date=2005-05-07}}</ref> Services that can be regarded as middleware include [enterprise application integration](/source/enterprise_application_integration), [data integration](/source/data_integration), [message oriented middleware](/source/message_oriented_middleware) (MOM), [object request broker](/source/object_request_broker)s (ORBs), and the [enterprise service bus](/source/enterprise_service_bus) (ESB).<ref name="LuckhamEvent11">{{cite book |url=https://books.google.com/books?id=dqWxewxhyq8C&pg=PA27 |title=Event Processing for Business: Organizing the Real-Time Enterprise |author=Luckham, D. C. |publisher=John Wiley & Sons |pages=27–28 |year=2011 |isbn=9781118171851}}</ref>

[Database](/source/DBMS) access services are often characterised as middleware. Some of them are language specific implementations and support heterogeneous features and other related communication features.<ref name="SimonOpen14">{{cite book |url=https://books.google.com/books?id=jyOjBQAAQBAJ&pg=PA43 |title=Open Client/Server Computing and Middleware |author1=Simon, A. R. |author2=Wheeler, T. |publisher=Academic Press |pages=43–49 |year=2014 |isbn=9781483214276}}</ref> Examples of database-oriented middleware include [ODBC](/source/ODBC), [JDBC](/source/JDBC), and [transaction processing](/source/transaction_processing) monitors.<ref name="ArregocesData03">{{cite book |url=https://books.google.com/books?id=IcoqBXbG9IsC&pg=PA92 |title=Data Center Fundamentals |author1=Arregoces, M. |author2=Portolani, M. |publisher=Cisco Press |pages=92–93 |year=2003 |isbn=9781587140747}}</ref>

Distributed computing system middleware can loosely be divided into two categories—those that provide human-time services (such as web request servicing) and those that perform in machine-time. This latter middleware is somewhat standardized through the [Service Availability Forum](/source/SA_Forum)<ref name="SAFService11">{{cite web |url=http://devel.opensaf.org/SAI-Overview-B.05.03.AL.pdf |title=Service Availability Interface Specification |publisher=Service Availability Forum |date=30 September 2011 |access-date=26 July 2018 |archive-date=4 August 2016 |archive-url=https://web.archive.org/web/20160804111030/http://devel.opensaf.org/SAI-Overview-B.05.03.AL.pdf |url-status=dead }}</ref> and is commonly used in complex, [embedded systems](/source/embedded_systems) within the telecom, defence, and [aerospace](/source/aerospace) industries.<ref name="JokiahoService12">{{cite book |chapter-url=https://books.google.com/books?id=Ql1oHlKkHOsC&pg=PT9 |title=Service Availability: Principles and Practice |chapter=Foreword |author1=Jokiaho, T. |author2=Fryer, J. |publisher=John Wiley & Sons |page=xv |year=2012 |isbn=9781119941675}}</ref>

==Usage of middleware==
Many categories of middleware have been defined, based on the field in which it is used or the application module it serves. A recent bibliography identified the main categories of middleware as follows:<ref>{{cite journal |last1=Gazis |first1=Alexandros |last2=Katsiri |first2=Eleftheria |title=Middleware 101: What to know now and for the future |journal=  ACM Queue|date=15 March 2022 |volume=20 |pages=10–23 |doi=10.1145/3526211 |s2cid=247494415 |doi-access=free }}</ref>
*Transactional: Processing of multiple synchronous/asynchronous transactions, serving as a cluster of associated requests from distributed systems such as bank transactions or credit card payments.
*Message-oriented: Message queue and message passing architectures that support synchronous/asynchronous communication.
*Procedural: Remote and local architectures to connect, pass, and retrieve software responses of asynchronous systems communications such as a call operation. 
*Object-oriented: Similar to procedural middleware, but incorporates [object-oriented programming](/source/object-oriented_programming) design principles. Analytically, its software component encompasses object references, exceptions, and inheritance of properties via distributed object requests.

==Other examples==
The term ''middleware'' is used in other contexts as well. ''Middleware'' is sometimes used in a similar sense to a [software driver](/source/software_driver), an abstraction layer that hides detail about hardware devices or other software from an application.
* The [Android](/source/Android_(operating_system)) operating system uses the [Linux](/source/Linux) kernel at its core, and provides an [application framework](/source/application_framework) that developers incorporate into their applications. In addition, Android provides a middleware layer including [libraries](/source/software_library) that provide services such as data storage, screen display, [multimedia](/source/multimedia), and web browsing. Because the middleware libraries are [compiled](/source/Compiler) to [machine language](/source/machine_language), services execute quickly. Middleware libraries also implement device-specific functions, so applications and the application framework need not concern themselves with variations between Android devices. Android's middleware layer also contains the [ART](/source/Android_Runtime) [virtual machine](/source/virtual_machine) and its core [Java](/source/Java_(programming_language)) application libraries.<ref>Charlie Collins, Michael Galpin and Matthias Kaeppler, Android in Practice, Manning Publications, 2011</ref>
* Middleware also refers to the software that separates two or more APIs and provides services such as rate-limiting, authentication, and logging.
* [Game engine](/source/Game_engine) software such as [Gamebryo](/source/Gamebryo) and [RenderWare](/source/RenderWare) are sometimes described as middleware because they provide services to simplify game development.<ref name="MooreIntro06">{{cite book |title=Introduction to the Game Industry |author=Moore, M. E. |publisher=Pearson Prentice Hall |page=169 |year=2006 |isbn=9780131687431}}</ref>
* In simulation technology, ''middleware'' is generally used in the context of the [high level architecture](/source/high_level_architecture_(simulation)) (HLA) that applies to many distributed simulations. It is a layer of software that lies between the [application code](/source/application_code) and the [run-time infrastructure](/source/Run-Time_Infrastructure_(simulation)). Middleware generally consists of a library of functions, and enables a number of applications—simulations or federates in HLA terminology—to [page](/source/paging) these functions from the common library rather than recreate them for each application.<ref name="DriraCoop03">{{cite book |chapter-url=https://books.google.com/books?id=2clrCQAAQBAJ&pg=PA41 |chapter=Chapter 4: Middleware |title=Cooperative Environments for Distributed Systems Engineering: The Distributed Systems Environment Report |author1=Becchini, R. |author2=Chilaev, P. |author3=Krivtsov, V. |display-authors=etal|editor1=Drira, K. |editor2=Martelli, A. |editor3=Villemur, T.  |publisher=Springer |pages=41–4 |year=2003 |isbn=9783540455820}}</ref>
* In x86 computers, [UEFI/BIOS](/source/UEFI%2FBIOS) is a middleware between the operating system and the [hardware](/source/computer_hardware).
* Wireless networking developers can use middleware to meet the challenges associated with a [wireless sensor network](/source/wireless_sensor_network) (WSN). Implementing a middleware application allows WSN developers to integrate operating systems and hardware with the wide variety of currently available applications.<ref>Hadim, S. and Mohamed, N. (2006). Middleware challenges and approaches for wireless sensor networks. IEEE Distributed Systems Online vol 7. Issue 3. Retrieved March 4, 2009 from
[http://dsonline.computer.org/portal/site/dsonline/menuitem.3a529f3832e8f1e13587e0606bcd45f3/index.jsp iEEE Distributed Systems Online] {{Webarchive|url=https://web.archive.org/web/20110928211251/http://dsonline.computer.org/portal/site/dsonline/menuitem.3a529f3832e8f1e13587e0606bcd45f3/index.jsp |date=2011-09-28 }}</ref>
* The [QNX](/source/QNX) operating system offers middleware for providing multimedia services for use in [automobile](/source/automobile)s, [aircraft](/source/aircraft), and other environments.<ref name="QNX08">{{cite web |url=http://www.qnx.com/news/pr_2901_1.html |title=QNX Software Joins Internet ITS Consortium of Japan |work=QNX News Releases |publisher=QNX |date=6 May 2008 |access-date=26 July 2018}}</ref>
* [Radio-frequency identification](/source/Radio-frequency_identification) (RFID) software toolkits provide middleware to filter noisy and redundant raw data.<ref name="GloverRFID06">{{cite book |url=https://books.google.com/books?id=cKKZoH48D4cC&pg=PA38 |title=RFID Essentials |author1=Glover, B. |author2=Bhatt, H. |publisher=O'Reilly Media |pages=38–44 |year=2006 |isbn=9780596009441}}</ref>

==See also==
* [Language-agnostic](/source/Language-agnostic)
* [Third-party software component](/source/Third-party_software_component)

==References==
{{reflist}}

== External links ==
* {{Wiktionary-inline}}

{{Computer science}}
{{Authority control}}

Category:Middleware

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