[[!meta copyright="Copyright © 2001, 2002, 2003, 2006, 2007, 2008, 2010, 2013 Free Software Foundation, Inc."]] [[!meta license="""[[!toggle id="license" text="GFDL 1.2+"]][[!toggleable id="license" text="Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled [[GNU Free Documentation License|/fdl]]."]]"""]] The *Mach Interface Generator* (*MIG*) is an [[IDL]] compiler. Based on an interface definition, it creates stub code to [[invoke]] object methods and to demultiplex incoming messages. These stub functions conveniently hide the details of Mach's [[IPC]] and [[port]] machinery and make it easy to implement and use Mach [[interface]]s as [[remote procedure calls (RPC)|rpc]]: by using the stub functions, the client programs can call remote procedures more or less like any other C function. These functions encode arguments into [[message]]s' format (*marshalling*), wait for a result on a newly created [[reply port|port]], decode return arguments from the reply message (*demarshalling*, or *unmarshalling*) and pass them to the client program. Similar actions are provided in the skeletons that are linked to server programs. MIG allows very precise semantics to be specified about what the arguments are and how to be passed. It has its problems with [[structured_data|open_issues/mig_portable_rpc_declarations]], however. * [[Documentation]] # Implementations * [[GNU_MIG]]