{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2025,10,10]],"date-time":"2025-10-10T01:38:08Z","timestamp":1760060288916,"version":"build-2065373602"},"reference-count":49,"publisher":"MDPI AG","issue":"3","license":[{"start":{"date-parts":[[2025,8,26]],"date-time":"2025-08-26T00:00:00Z","timestamp":1756166400000},"content-version":"vor","delay-in-days":0,"URL":"https:\/\/creativecommons.org\/licenses\/by\/4.0\/"}],"funder":[{"name":"Blavatnik Family Foundation","award":["2953"],"award-info":[{"award-number":["2953"]}]}],"content-domain":{"domain":[],"crossmark-restriction":false},"short-container-title":["Software"],"abstract":"<jats:p>The development of software applications using multiple programming languages has increased in recent years, as it allows the selection of the most suitable language and runtime for each component of the system and the integration of third-party libraries. However, this practice involves complexity and error proneness, due to the absence of an adequate system for the interoperability of multiple programming languages. Developers are compelled to resort to workarounds, such as library reimplementation or language-specific wrappers, which are often dependent on C as the common denominator for interoperability. These challenges render the use of multiple programming languages a burdensome and demanding task that necessitates highly skilled developers for implementation, debugging, and maintenance, and raise doubts about the benefits of interoperability. To overcome these challenges, we propose MetaFFI, introducing a fully in-process, plugin-oriented, runtime-independent architecture based on a minimal C abstraction layer. It provides deep binding without relying on a shared object model, virtual machine bytecode, or manual glue code. This architecture is scalable (O(n) integration for n languages) and supports true polymorphic function and object invocation across languages. MetaFFI is based on leveraging FFI and embedding mechanisms, which minimize restrictions on language selection while still enabling full-duplex binding and deep integration. This is achieved by exploiting the less restrictive shallow binding mechanisms (e.g., Foreign Function Interface) to offer deep binding features (e.g., object creation, methods, fields). MetaFFI provides a runtime-independent framework to load and xcall (Cross-Call) foreign entities (e.g., getters, functions, objects). MetaFFI uses Common Data Types (CDTs) to pass parameters and return values, including objects and complex types, and even cross-language callbacks and dynamic calling conventions for optimization. The indirect interoperability approach of MetaFFI has the significant advantage of requiring only 2n mechanisms to support n languages, compared to direct interoperability approaches that need n2 mechanisms. We developed and tested a proof of concept tool interoperating three languages (Go, Python, and Java), on Windows and Ubuntu. To evaluate the approach and the tool, we conducted a user study, with promising results. The MetaFFI framework is available as open source software, including its full source code and installers, to facilitate adoption and collaboration across academic and industrial communities.<\/jats:p>","DOI":"10.3390\/software4030021","type":"journal-article","created":{"date-parts":[[2025,8,26]],"date-time":"2025-08-26T10:35:17Z","timestamp":1756204517000},"page":"21","update-policy":"https:\/\/doi.org\/10.3390\/mdpi_crossmark_policy","source":"Crossref","is-referenced-by-count":1,"title":["MetaFFI-Multilingual Indirect Interoperability System"],"prefix":"10.3390","volume":"4","author":[{"ORCID":"https:\/\/orcid.org\/0009-0006-3364-1463","authenticated-orcid":false,"given":"Tsvi","family":"Cherny-Shahar","sequence":"first","affiliation":[{"name":"Blavatnik School of Computer Science and AI, Tel Aviv University, Tel Aviv P.O. 69978, Israel"}]},{"given":"Amiram","family":"Yehudai","sequence":"additional","affiliation":[{"name":"Blavatnik School of Computer Science and AI, Tel Aviv University, Tel Aviv P.O. 69978, Israel"}]}],"member":"1968","published-online":{"date-parts":[[2025,8,26]]},"reference":[{"key":"ref_1","doi-asserted-by":"crossref","first-page":"512","DOI":"10.1109\/TSE.2024.3358258","article-title":"Multi-language software development: Issues, challenges, and solutions","volume":"50","author":"Yang","year":"2024","journal-title":"IEEE Trans. Softw. Eng."},{"key":"ref_2","doi-asserted-by":"crossref","first-page":"1","DOI":"10.1186\/s40411-017-0035-z","article-title":"On multi-language software development, cross-language links and accompanying tools: A survey of professional software developers","volume":"5","author":"Mayer","year":"2017","journal-title":"J. Softw. Eng. Res. Dev."},{"key":"ref_3","doi-asserted-by":"crossref","unstructured":"Bissyand\u00e9, T.F., Thung, F., Lo, D., Jiang, L., and R\u00e9veill\u00e8re, L. (2013, January 22\u201326). Popularity, interoperability, and impact of programming languages in 100,000 open source projects. Proceedings of the 2013 IEEE 37th Annual Computer Software and Applications Conference, Kyoto, Japan.","DOI":"10.1109\/COMPSAC.2013.55"},{"key":"ref_4","doi-asserted-by":"crossref","unstructured":"Yang, H., Lian, W., Wang, S., and Cai, H. (2023, January 14\u201320). Demystifying issues, challenges, and solutions for multilingual software development. Proceedings of the 2023 IEEE\/ACM 45th international conference on software engineering (ICSE), Melbourne, Australia.","DOI":"10.1109\/ICSE48619.2023.00157"},{"key":"ref_5","doi-asserted-by":"crossref","first-page":"8","DOI":"10.1145\/3201898","article-title":"Cross-language interoperability in a multi-language runtime","volume":"40","author":"Grimmer","year":"2018","journal-title":"ACM Trans. Program. Lang. Syst."},{"key":"ref_6","doi-asserted-by":"crossref","first-page":"20","DOI":"10.1145\/2542661.2543971","article-title":"The challenge of cross-language interoperability","volume":"11","author":"Chisnall","year":"2013","journal-title":"Queue"},{"key":"ref_7","unstructured":"Cherny-Shahar, T., and Yehudai, A. (2024). Multi-lingual development & programming languages interoperability: An empirical study. arXiv."},{"key":"ref_8","doi-asserted-by":"crossref","unstructured":"Li, W., Li, L., and Cai, H. (2022, January 14\u201316). On the vulnerability proneness of multilingual code. Proceedings of the 30th ACM Joint European Software Engineering Conference and Symposium on the Foundations of Software Engineering, New York, NY, USA. Esec\/fse 2022.","DOI":"10.1145\/3540250.3549173"},{"key":"ref_9","doi-asserted-by":"crossref","first-page":"46","DOI":"10.1145\/3631967","article-title":"How are multilingual systems constructed: Characterizing language use and selection in open-source multilingual software","volume":"33","author":"Li","year":"2024","journal-title":"ACM Trans. Softw. Eng. Methodol."},{"key":"ref_10","doi-asserted-by":"crossref","first-page":"56","DOI":"10.1145\/3432690","article-title":"Are multi-language design smells fault-prone? An empirical study","volume":"30","author":"Abidi","year":"2021","journal-title":"ACM Trans. Softw. Eng. Methodol."},{"key":"ref_11","doi-asserted-by":"crossref","first-page":"428","DOI":"10.1109\/TR.2020.3024873","article-title":"On the impact of interlanguage dependencies in multilanguage systems empirical case study on java native interface applications (JNI)","volume":"70","author":"Grichi","year":"2021","journal-title":"IEEE Trans. Reliab."},{"key":"ref_12","doi-asserted-by":"crossref","first-page":"151","DOI":"10.1002\/cpe.909","article-title":"Bridging the language gap in scientific computing: The Chasm approach","volume":"18","author":"Rasmussen","year":"2006","journal-title":"Concurr. Comput. Pract. Exp."},{"key":"ref_13","unstructured":"Lindholm, T., Yellin, F., Bracha, G., and Buckley, A. (2025, August 22). The Java Virtual Machine Specification. Available online: https:\/\/docs.oracle.com\/javase\/specs\/jvms\/se8\/html\/index.html."},{"key":"ref_14","unstructured":"gewarren (2025, August 22). Common Language Runtime (CLR) Overview\u2014.NET Framework. Available online: https:\/\/learn.microsoft.com\/en-us\/dotnet\/standard\/clr."},{"key":"ref_15","doi-asserted-by":"crossref","first-page":"28","DOI":"10.1145\/1142031.1142044","article-title":"The Rise and Fall of CORBA: There\u2019s a lot we can learn from CORBA\u2019s mistakes","volume":"4","author":"Henning","year":"2006","journal-title":"Queue"},{"key":"ref_16","unstructured":"mcleanbyron (2025, August 22). Component Object Model (COM)\u2014Win32 Apps. Available online: https:\/\/learn.microsoft.com\/en-us\/windows\/win32\/com\/component-object-model--com--portal."},{"key":"ref_17","unstructured":"Beazley, D.M. (1996, January 10\u201313). SWIG: An easy to use tool for integrating scripting languages with C and C++. In Proceedings of the Tcl\/Tk Workshop. Monterey, CA, USA."},{"key":"ref_18","unstructured":"Gon\u00e7alves, R.J.,  M\u00fcller, J.P., Mertins, K., and Zelm, M. Towards precise descriptions for programming language interoperability: A general approach based on operational semantics. Proceedings of the Enterprise Interoperability II."},{"key":"ref_19","doi-asserted-by":"crossref","unstructured":"Chiba, S. (2019, January 21\u201322). Foreign language interfaces by code migration. Proceedings of the 18th ACM SIGPLAN International Conference on Generative Programming: Concepts and Experiences (GPCE 2019), New York, NY, USA.","DOI":"10.1145\/3357765.3359521"},{"key":"ref_20","first-page":"3","article-title":"Interoperability in Programming Languages","volume":"1","author":"Malone","year":"2014","journal-title":"Sch. Horizons Univ. Minn. Morris Undergrad. J."},{"key":"ref_21","unstructured":"Reppy, J., and Song, C. (October, January 22\u2013). Application-specific foreign-interface generation. Proceedings of the 5th International Conference on Generative Programming and Component Engineering (Gpce \u201906), New York, NY, USA."},{"key":"ref_22","unstructured":"Group, O.M. (2025, August 22). About the Common Object Request Broker Architecture Specification Version 3.4 Beta. Available online: https:\/\/www.omg.org\/spec\/CORBA\/3.4\/Beta1\/About-CORBA."},{"key":"ref_23","unstructured":"Oracle (2025, August 22). JNI APIs and Developer Guides. Available online: https:\/\/docs.oracle.com\/javase\/8\/docs\/technotes\/guides\/jni\/spec\/jniTOC.html."},{"key":"ref_24","unstructured":"Green, A. (2025, August 22). LibFFI. Available online: https:\/\/sourceware.org\/libffi\/."},{"key":"ref_25","unstructured":"Lindholm, T., Yellin, F., Bracha, G., and Buckley, A. (2025, August 22). Chapter 6. The Java Virtual Machine Instruction Set. Available online: https:\/\/docs.oracle.com\/javase\/specs\/jvms\/se8\/html\/jvms-6.html."},{"key":"ref_26","unstructured":"(2025, August 22). Common Language Infrastructure (CLI). Available online: https:\/\/ecma-international.org\/publications-and-standards\/standards\/ecma-335\/."},{"key":"ref_27","unstructured":"Wilmet, S. (2025, August 22). The GLib\/GTK+ Development Platform. Available online: https:\/\/www.gnome.org\/."},{"key":"ref_28","unstructured":"Microsoft (2025, August 22). VARIANT (oaidl.h)\u2014Win32 Apps | Microsoft Docs. Available online: https:\/\/learn.microsoft.com\/en-us\/windows\/win32\/api\/oaidl\/ns-oaidl-variant."},{"key":"ref_29","unstructured":"Kaplan, A., Ridgway, J., and Wileden, J.C. (1998, January 16\u201318). Why IDLs are not ideal. Proceedings of the 9th International Workshop on Software Specification and Design (IWSSD \u201998), Washington, DC, USA."},{"key":"ref_30","unstructured":"Microsoft (2025, August 22). The Interface Definition Language (IDL) File\u2014Win32 Apps | Microsoft Docs. Available online: https:\/\/learn.microsoft.com\/en-us\/windows\/win32\/rpc\/the-interface-definition-language-idl-file."},{"key":"ref_31","unstructured":"Foundation, H. (2025, August 22). Haxe\u2014The Cross-Platform Toolkit. Available online: https:\/\/haxe.org\/."},{"key":"ref_32","unstructured":"Nelson, B.J. (2025, August 22). Remote Procedure Call. Available online: https:\/\/cs.nyu.edu\/~apanda\/classes\/fa22\/papers\/nelson81remote.pdf."},{"key":"ref_33","unstructured":"Foundation, P.S. (2025, August 22). Ctypes\u2014A Foreign Function Library for Python\u2014Python 3.8.3 Documentation. Available online: https:\/\/docs.python.org\/3\/library\/ctypes.html."},{"key":"ref_34","unstructured":"Foundation, P.S. (2025, August 22). Python\/Cpython: The Python Programming Language. Available online: https:\/\/www.python.org\/."},{"key":"ref_35","first-page":"9:1","article-title":"Reasoning about foreign function interfaces without modelling the foreign language (artifact)","volume":"5","author":"Turcotte","year":"2019","journal-title":"Dagstuhl Artifacts Ser."},{"key":"ref_36","doi-asserted-by":"crossref","first-page":"223","DOI":"10.1145\/1932682.1869479","article-title":"Cross-language, type-safe, and transparent object sharing for co-located managed runtimes","volume":"45","author":"Wegiel","year":"2010","journal-title":"SIGPLAN Not."},{"key":"ref_37","unstructured":"Lattner, C., and Adve, V. (2004, January 20\u201324). LLVM: A compilation framework for lifelong program analysis amp; transformation. Proceedings of the 2004 International Symposium on Code Generation and Optimization (CGO), San Jose, CA, USA."},{"key":"ref_38","doi-asserted-by":"crossref","unstructured":"Cowell, J. (1996). Object linking and embedding (OLE). Essential Visual Basic 4.0 Fast: How to Develop Applications in Visual Basic, Springer.","DOI":"10.1007\/978-1-4471-3093-2"},{"key":"ref_39","unstructured":"Foundation, P.S. (2025, August 22). Design of CPython\u2019s Garbage Collector\u2014Python Developer\u2019s Guide. Available online: https:\/\/devguide.python.org\/internals\/garbage-collector\/index.html."},{"key":"ref_40","unstructured":"Microsystems, S. (2025, August 22). Memory Management in the Java HotSpot Virtual Machine. Available online: https:\/\/www.oracle.com\/technetwork\/java\/javase\/memorymanagement-whitepaper-150215.pdf."},{"key":"ref_41","unstructured":"Gangemi, S. (2025, August 22). An Overview of Memory Management in Go. Available online: https:\/\/medium.com\/safetycultureengineering\/an-overview-of-memory-management-in-go-9a72ec7c76a8."},{"key":"ref_42","doi-asserted-by":"crossref","first-page":"137","DOI":"10.1007\/978-3-540-31985-6_10","article-title":"Optimizing C multithreaded memory management using thread-local storage","volume":"3443","author":"Sade","year":"2005","journal-title":"Lect. Notes Comput. Sci."},{"key":"ref_43","doi-asserted-by":"crossref","unstructured":"Cherny-Shahar, T., and Yehudai, A. (2024). MetaFFI\u2014Multilingual indirect interoperability system. arXiv.","DOI":"10.3390\/software4030021"},{"key":"ref_44","unstructured":"Petersen, M. (2025, August 22). What\u2019s New in Emacs 26.1. Available online: https:\/\/www.masteringemacs.org\/article\/whats-new-in-emacs-26-1."},{"key":"ref_45","unstructured":"Berners-Lee, T., and Connolly, D.W. (2025, August 22). Hypertext Markup Language\u20142.0. Available online: https:\/\/www.rfc-editor.org\/info\/rfc1866."},{"key":"ref_46","unstructured":"Stallman, R., McGrath, R., and Smith, P.D. (2004). GNU Make: A Program for Directing Recompliation; GNU Make Version 3.81, Free Software Foundation."},{"key":"ref_47","unstructured":"Flanagan, H. (2025, August 22). Cascading Style Sheets (CSS) Requirements for RFCs. Available online: https:\/\/www.rfc-editor.org\/info\/rfc7993."},{"key":"ref_48","unstructured":"Bray, T. (2025, August 22). The JavaScript Object Notation (JSON) Data Interchange Format. Available online: https:\/\/www.rfc-editor.org\/info\/rfc8259."},{"key":"ref_49","unstructured":"Rose, D.M.T., Hollenbeck, S., and Masinter, L.M. (2025, August 22). Guidelines for the Use of Extensible Markup Language (XML) Within IETF Protocols. Available online: https:\/\/www.rfc-editor.org\/info\/rfc3470."}],"container-title":["Software"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/www.mdpi.com\/2674-113X\/4\/3\/21\/pdf","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2025,10,9]],"date-time":"2025-10-09T18:32:51Z","timestamp":1760034771000},"score":1,"resource":{"primary":{"URL":"https:\/\/www.mdpi.com\/2674-113X\/4\/3\/21"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2025,8,26]]},"references-count":49,"journal-issue":{"issue":"3","published-online":{"date-parts":[[2025,9]]}},"alternative-id":["software4030021"],"URL":"https:\/\/doi.org\/10.3390\/software4030021","relation":{},"ISSN":["2674-113X"],"issn-type":[{"type":"electronic","value":"2674-113X"}],"subject":[],"published":{"date-parts":[[2025,8,26]]}}}