Abstractions for Distributed Interaction: Guests or Relatives? ⋆ Christian Heide Damm 1 , Patrick Thomas Eugster 2 , and Rachid Guerraoui 2 1 Computer Science Department University of Aarhus, Denmark 2 Distributed Programming Laboratory Swiss Federal Institute of Technology, Lausanne Abstract. What abstractions are useful for expressing distributed in- teraction? This question has constituted an active area of research in the last decades and several candidates have been proposed, including re- mote method invocation, tuple spaces and publish/subscribe. How should these abstractions be supported? Through a library or “directly” within a language? This important complementary question has sparked less enthousiasm. This paper contributes to addressing this question in the context of Java and the type-based publish/subscribe (TPS) abstraction, an object- oriented variant of the publish/subscribe paradigm. We compare our three implementations of TPS, namely in (1) an extension of Java we designed to inherently support TPS, (2) standard Java, and (3) Java augmented with genericity. Through our comparison, we identify some general purpose that fea- tures that an object-oriented language should have in order to enable a satisfactory library implementation of TPS. We (re-)insist here on the importance of providing both genericity and reflective features in the language, and point out the very fact that the way these features are currently supported might indeed enable satisfactory implementations of remote method invocations, yet is still insufficient for TPS and tuple spaces. 1 Introduction Motivations. Typically, when useful programming abstractions are identified, they are provided as libraries written in various programming languages. Some- times, they are later on integrated into the programming languages themselves. A seminal example is the monitor abstraction proposed by Hoare. It was first implemented as a library, became a first class construct in languages like Concur- rent Pascal [5] or Portal [9], and is today part of the Java [24] root object type. The same historical pattern has also been applied to abstractions for concurrent, parallel, and most recently, distributed programming. The remote procedure call ⋆ This work is partially supported by Agilent Laboratories and Lombard Odier & Co.