Fact-checked by Grok 2 weeks ago

Inter-Client Communication Conventions Manual

The Inter-Client Communication Conventions Manual (ICCCM) is a foundational specification for the that outlines voluntary conventions for inter-client communication among applications sharing a common , enabling cooperative behaviors in data exchange, window management, and resource allocation without mandating a specific . Developed collaboratively by the X Consortium's wmtalk over more than two years, the ICCCM originated as a draft in February 1988 during the X11 Release 2 development cycle and progressed through public review in 1989. Version 1.0 was released in July 1989 alongside X11 Release 4, followed by Version 1.1 in September 1991 with X11 Release 5, and culminating in Version 2.0 in April 1994 for X11 Release 6, which introduced enhancements like improved session management support and fixes to earlier semantic ambiguities while preserving backward compatibility. Edited initially by David Rosenthal and later by Stuart W. Marks, the manual emphasizes minimal required behaviors to promote timely adoption and interoperability among X clients. Central to the ICCCM are mechanisms for peer-to-peer data transfer via selections (such as PRIMARY for pointer selections, SECONDARY for secondary selections, and for copy-paste operations) and cut buffers (using like CUT_BUFFER0 through CUT_BUFFER7 for simpler, legacy data storage). It also details client interactions with window managers, including standard window (e.g., WM_NAME for titles, WM_HINTS for size and position preferences, and WM_PROTOCOLS for protocols like WM_DELETE_WINDOW) and transitions such as (mapped and visible), (iconified), and Withdrawn (unmapped without iconification). Additional conventions address session management for saving and restoration, shared resource handling (including input focus models like Passive and Globally Active, pointer grabs, and colormap installations), and device color characterization to standardize conversions between color spaces like and RGB. These guidelines ensure robust, predictable behavior in multi-client X environments, influencing window manager implementations and application development to this day.

Development and History

Origins in X Window System

In the mid-1980s, the X Window System was designed primarily to provide low-level mechanisms for graphics and input handling, deliberately avoiding specifications for user interfaces or most inter-application communication to promote flexibility and portability across diverse hardware and operating systems. This approach, while enabling rapid adoption during Project Athena at MIT starting in 1984, soon revealed significant challenges as the number of X-based applications grew; without standardized conventions, clients exhibited incompatible behaviors, such as inconsistent window management interactions and resource sharing, leading to fragmented user experiences and interoperability issues among applications from different developers. To mitigate these problems, the X Consortium established the wmtalk in 1987, comprising experts focused on resolving window management and inter-client communication deficiencies in the evolving X ecosystem. The group conducted extensive discussions over more than two years, highlighting the necessity for voluntary conventions that extended beyond the core X protocol's primitives to foster cooperative behaviors among clients, window managers, and other components. Key early contributors included David Rosenthal, who served as the primary architect, and Stuart W. Marks, the editor, alongside participants like Bob Scheifler, Phil Karlton, and Ellis Cohen, who emphasized upward compatibility and minimal disruption to existing implementations during refinements at forums such as the January 1988 MIT X Conference and the 1988 Summer . The culmination of these efforts was the initial draft of the Inter-Client Communication Conventions Manual, dated February 25, 1988, and distributed alongside the X11R2 release to promote basic compatibility guidelines for future client development. This draft, explicitly labeled as subject to change, targeted essential areas like client-to-window manager signaling while prioritizing conceptual frameworks over rigid mandates, setting the stage for broader adoption within the X community.

Versions and Revisions

The development of the Inter-Client Communication Conventions Manual (ICCCM) involved several iterative drafts and releases by the , beginning with preliminary versions in 1988 and culminating in formalized standards integrated into releases. An initial draft was distributed on February 25, 1988, with X Version 11 Release 2 (X11R2), serving as a preliminary document subject to significant changes. This was followed by the July 27, 1988, Consortium Review Draft, which introduced key incompatibilities with the earlier draft, including disallowing the None property in ConvertSelection requests, renaming INCREMENTAL and INDIRECT protocols to INCR and MULTIPLE, updating the protocol, reducing the values in WM_HINTS.initial_state, and removing x, y, width, and height fields from WM_NORMAL_HINTS while adding base fields and win_gravity. Public review drafts emerged in early 1989, incorporating further revisions such as replacing the messages field in WM_HINTS with , introducing WM_COLORMAP_WINDOWS (replacing the less reliable WM_COLORMAPS), removing the pseudoroot concept, adding the protocol, and updating RGB_COLOR_MAP conventions; these changes aimed to resolve ambiguities but created additional incompatibilities, particularly in colormap handling and session semantics. Version 1.0 of the ICCCM was released in July 1989 by the X Consortium, primarily featuring editorial fixes and minor clarifications, such as adding a section on input grabs, specifying the use of and ClientMessage events for iconification, and requiring border-width inclusion in synthetic ConfigureNotify events, though it retained some incompatibilities from prior drafts like changes to handling. Version 1.1 followed in September 1991, published alongside X11 Release 5 (X11R5), and included minor semantic adjustments, notably the addition of a Device Color Characterization section, clarification of as a valid type, and references to Compound Text encoding, ensuring broader compatibility while addressing edge cases in protocol usage. The push for Version 2.0 began with a public review draft in December 1993, developed over two years by the X Consortium's wmtalk working group to enhance the document's facilities and readability. The final Version 2.0 was released in April 1994 with X11 Release 6 (X11R6), introducing new features like client-initiated colormap installation, revising the PIXMAP target, updating session management protocols, renaming VisibleHint to UrgencyHint, and prohibiting CurrentTime in WM_TAKE_FOCUS requests; it also fixed longstanding ambiguities from earlier versions, such as in selection protocols and window state changes, while maintaining upward compatibility where feasible and documenting exceptions in an appendix. Incompatibilities across versions, including shifts in property semantics and protocol behaviors, are detailed in the ICCCM's Appendix A, advising implementers to check for backward compatibility modes. These releases were officially published by the X Consortium as standards integral to the X11 ecosystem, influencing client and window manager implementations thereafter.

Purpose and Background

Objectives of the ICCCM

The Inter-Client Communication Conventions Manual (ICCCM) was developed to establish a set of standardized protocols enabling reliable inter-client communication within the , without requiring modifications to the underlying X protocol itself. This approach aligns with the core design philosophy of X Version 11, which emphasizes specifying mechanisms rather than policies to allow flexibility in implementation. By focusing on protocol-level operations, the ICCCM ensures that clients can interact seamlessly, expressed in terms that permit communication even across clients written in different programming languages. A key objective was to promote among diverse X11 clients, window managers, and session managers, thereby minimizing the reliance on ad-hoc, application-specific workarounds that could fragment the . In the multi-vendor environment of the X , this aimed to foster a "good citizen" model where clients coexist harmoniously, reducing compatibility issues and enhancing overall system reliability. The conventions were intentionally minimal, avoiding enforcement of any particular to accommodate varied developer preferences while ensuring predictable behavior. The ICCCM also sought to support user expectations by providing consistent frameworks for essential interactions, such as window manipulation, data exchange, and resource sharing, without dictating specific policies. This focus on user-centric reliability helps maintain intuitive experiences across different applications and environments. Finally, the manual emphasized and minimal assumptions about implementation details, reserving protocol values for future extensions and ensuring upward compatibility with prior drafts to allow evolution without breaking existing systems. This design principle supports long-term adaptability in the X11 architecture.

Scope and Coverage

The Inter-Client Communication Conventions Manual (ICCCM) delineates a focused scope within the , standardizing inter-client interactions to promote interoperability without prescribing comprehensive policies. It primarily covers peer-to-peer data exchange mechanisms, such as selections (e.g., PRIMARY, SECONDARY, and ) and cut buffers, which enable clients to share information directly. Additionally, it addresses client-to-window manager communication through conventions for managing top-level windows, including properties like WM_NAME and WM_HINTS, as well as state transitions such as , , and Withdrawn states. The manual also encompasses session management protocols for preserving across sessions and guidelines for handling shared resources, including input focus, pointer grabs, colormaps, and keyboard mappings. Explicitly excluded from the ICCCM's coverage are core X protocol extensions, low-level graphics primitives, and interactions in non-X environments, as the manual adheres to an explicit design goal of specifying mechanisms rather than policies. These exclusions ensure the document remains a lightweight set of conventions tailored to X Version 11's protocol-level operations, avoiding overlap with foundational protocol definitions or higher-level toolkits. In the ICCCM, "conventions" are defined as non-mandatory but recommended practices, expressed solely in terms of protocol operations to foster robustness and among clients written in various languages, without relying on specific interfaces like those in Xlib. This approach complements other X standards, such as the X Toolkit Intrinsics (Xt), by focusing on inter-client protocol behaviors rather than widget-level abstractions or policies, thereby preventing domain overlap. of the ICCCM expands these conventions slightly to address evolving needs in session management and resource handling.

Core Conventions

Peer-to-Peer Communication

The Inter-Client Communication Conventions Manual (ICCCM) establishes communication between X11 clients through the selection mechanism, allowing direct, asynchronous data exchange independent of window manager intervention. This approach enables clients to share diverse data types, such as text or images, by designating temporary ownership of selection atoms and handling conversion requests via X protocol events. To ensure interoperability, clients are required to support only three predefined selections: PRIMARY, SECONDARY, and . The PRIMARY selection functions as the default for communicating a single argument to applications, commonly facilitating middle-mouse-button paste operations in text-based interfaces. The SECONDARY selection supports secondary arguments or temporary preservation of the PRIMARY selection during multi-step interactions. The CLIPBOARD selection is reserved for explicit cut-and-paste operations, often coordinated by a dedicated client to maintain persistence across applications. Ownership of a selection is asserted by a client using the XSetSelectionOwner request with a valid , and the current owner can be queried by any client via XGetSelectionOwner. A requesting client initiates data transfer by issuing XConvertSelection, specifying the selection atom, target format (e.g., STRING or PIXMAP), and a property name on one of its own windows to receive the converted data. The owner then converts the selection to the requested target, stores the result as the specified property on the requestor's window, and notifies completion or failure using XSendSelectionNotify to generate a SelectionNotify event. Support for multiple data types is facilitated by special targets: TARGETS returns a list of supported formats, while MULTIPLE allows a single request to convert to several targets simultaneously, with results stored in multiple properties. All transfers operate asynchronously; the requestor polls for the SelectionNotify event and retrieves data via XGetProperty, after which it must delete the property using XDeleteProperty or XGetProperty with the delete option to acknowledge receipt and free resources. For large datasets exceeding the X server's MaxRequestSize limit, the INCR protocol enables incremental transfer: the owner initially sets an INCR property with an estimated byte length, the requestor deletes it to begin, and the owner appends data chunks (each under the size limit) via successive property updates, signaling completion with a zero-length property that the requestor deletes upon retrieval. Selection owners bear primary responsibilities for timely responses, processing SelectionRequest events by converting and delivering data without undue delay, as prolonged waits can disrupt user interactions. Requestors, in turn, must monitor events diligently and delete properties promptly to avoid resource leaks, though the ICCCM imposes no fixed timeouts, relying instead on the inherent asynchrony of the X event queue. As a legacy complement to selections, the ICCCM defines cut buffers for simple text exchanges, comprising eight fixed properties on the root window of screen zero: CUT_BUFFER0 through CUT_BUFFER7, each of type STRING and format 8 bits per item. Clients store text by appending to these properties with XChangeProperty (using PropModeAppend for multi-line support) and retrieve primarily from CUT_BUFFER0 via XGetProperty, though any buffer is accessible; this mechanism prioritizes backward compatibility over the flexibility of selections.

Client-to-Window Manager Communication

The Inter-Client Communication Conventions Manual (ICCCM) establishes standardized protocols for X11 clients to communicate with window managers, enabling consistent management of top-level windows' lifecycle, appearance, and behavior. Clients achieve this primarily through properties set on top-level windows and by responding to events generated by the window manager. These conventions ensure that window managers can reliably handle tasks such as resizing, iconification, and focus management without requiring proprietary extensions. Central to this communication are specific window properties that clients must set to provide essential information. The WM_NAME property, a text property of format 8, contains an uninterpreted string representing the window's title, typically displayed in the title bar or border. Similarly, the WM_ICON_NAME property, also a text property of format 8, supplies a string for the window's icon label when iconified. The WM_NORMAL_HINTS property, of type WM_SIZE_HINTS and format 32, includes flags and values for size and position constraints in the normal state, such as minimum and maximum dimensions (min_width, max_height), preferred size increments, and aspect ratio limits; relevant flags include USPosition (bit 0) for user-specified position and PSize (bit 3) for program-specified size. The WM_HINTS property, of type WM_HINTS and format 32, conveys additional behavioral hints, including initial_state (1 for NormalState or 3 for IconicState), input focus model (e.g., bit 0 for input allowed), icon position (icon_x, icon_y), and references to an icon pixmap or window. Finally, the WM_PROTOCOLS property, an atom list of format 32, enumerates protocols the client supports, such as WM_DELETE_WINDOW, allowing the window manager to request actions like window deletion via synthetic events. Window states are managed through the WM_STATE property, of type WM_STATE and format 32, which stores the current state value (0 for WithdrawnState, 1 for NormalState, or 3 for IconicState) along with the icon window ID if applicable. In the NormalState, the window is viewable and fully managed by the window manager. The IconicState indicates the window is unmapped and represented by an icon, with the icon itself becoming viewable. The WithdrawnState means the window is unmapped and unmanaged, often used initially or when the client wishes to hide it without deletion. Transitions between states, such as iconification, are initiated by the window manager sending a synthetic ClientMessage event with the WM_CHANGE_STATE atom and the target state in data, to which compliant clients must respond by unmapping or mapping the window as appropriate. Clients perform key actions to facilitate management, starting with creating a top-level window as a child of the window with override_redirect set to False, placing it initially in WithdrawnState until the window manager reparents or maps it. For , where the window manager inserts an intervening frame window, clients receive a ReparentNotify event and must adjust event handling accordingly, with the option to reparent back to the to withdraw the window. Resizing and moving are guided by hints in WM_NORMAL_HINTS, where clients use ConfigureWindow requests with root-relative coordinates but defer actual changes to the window manager's synthetic ConfigureNotify events, ensuring they do not override management. geometry is specified via WM_HINTS fields like icon_x, icon_y, and icon_size hints from the WM_ICON_SIZE property, which defines preferred icon dimensions (minimum, maximum width/height) to standardize icon appearance across managers. Window managers respond to client requests and state changes by generating synthetic events, particularly ClientMessage events sent to the client window, and the relevant protocol atom in the message_type field. For instance, to invoke a protocol like WM_DELETE_WINDOW, the manager sends a ClientMessage with WM_PROTOCOLS in message_type and the specific atom in data, prompting the client to perform the action (e.g., close gracefully) rather than forcing unmapping. These mechanisms ensure protocol compliance and smooth interaction without direct client-window manager coupling.

Advanced Features

Session Management

The Inter-Client Communication Conventions Manual (ICCCM) outlines conventions for managing the lifecycle of sessions, enabling clients and session managers to coordinate startup, shutdown, and state preservation without disrupting ongoing interactions. This framework integrates with the X Session Management Protocol (XSMP), which provides the underlying mechanism for session managers to instruct clients on saving and restoring their states across sessions. Clients that support session management must register with the session manager to participate in these processes, ensuring that user sessions can be reliably terminated and restarted. Client registration begins with the establishment of key window properties on the client leader window, a designated top-level window that represents the entire client application. The WM_CLIENT_MACHINE property, of type TEXT, specifies the name of the machine running the client, aiding the session manager in identifying and restarting the application on the appropriate host. Upon connecting to the session manager via the SESSION_MANAGER environment variable, the client invokes the RegisterClient message in XSMP, providing a previous client-ID if restarting from a saved state; the session manager responds with a unique SM_CLIENT_ID property of type STRING, encoded in ISO 8859-1, which must be set on the client leader. Additionally, the WM_CLIENT_LEADER property, of type WINDOW, identifies the leader window itself, and all top-level non-transient windows must reference this leader to associate them with the session. An optional WM_WINDOW_ROLE property, also of type STRING, allows clients to assign unique identifiers to specific windows within the application, facilitating precise state restoration. Before modifying these properties, clients must withdraw their top-level windows to prevent interference. Interactions between clients and session managers occur through XSMP callbacks and ICCCM-defined protocols, primarily for state preservation during checkpoints. When the session manager initiates a save operation, it sends a SaveYourself message to the client, specifying parameters such as the checkpoint type (global, local, or both), whether it signals a shutdown, interaction style (none, errors only, or any), and whether it is a fast checkpoint. In response, ICCCM-compliant clients implement the WM_SAVE_YOURSELF protocol by processing a ClientMessage event on their windows, prompting them to save their current —such as user data, window positions, and configurations—and store restart information in properties like WM_COMMAND (a LISTofSTRING containing the command line for restarting the client). Upon completion, the client sends a SaveYourselfDone message indicating success or failure, and may enter a withdrawn state by unmapping its windows and synthesizing UnmapNotify events to inform the window manager. For complex saves, clients can request a second phase via SaveYourselfPhase2Request, allowing additional time for state capture. Window managers play a coordinating in session management, acting as clients themselves by registering with the session manager and obtaining their own SM_CLIENT_ID. They relay session manager requests to managed clients without accessing or altering client-specific data, preserving properties like WM_STATE (indicating normal, iconic, or withdrawn states), window geometries, and stacking orders during checkpoints. In the second checkpoint phase, triggered by the 's SaveYourselfPhase2Request, it saves layout information for all relevant windows before signaling completion to the session manager. This ensures that the can restore the accurately upon restart, mapping windows back to their saved states while respecting client-provided roles and leaders. During session shutdown, the session manager broadcasts a Die message to all registered clients after the save phase, prompting them to terminate gracefully by closing their connection and sending a ConnectionClosed reply. Clients in withdrawn states during this avoid unnecessary resource cleanup, as their windows are already unmapped, allowing the session manager to proceed with termination. If shutdown is cancelled, a message instructs clients to resume operations and potentially re-save state if needed. On restart, clients reconnect using their saved SM_CLIENT_ID and properties, remapping windows to recreate the prior session layout under the 's coordination. This process maintains session integrity, with the ensuring that restored windows inherit their original properties, such as basic window attributes briefly referenced in client-to- communications.

Shared Resources and Input Handling

The Inter-Client Communication Conventions Manual (ICCCM) establishes conventions for coordinating access to shared X11 resources, particularly input focus, pointer and keyboard events, colormaps, and keyboard mappings, to ensure among multiple clients without conflicts. These rules prevent race conditions and promote predictable behavior in multi-client environments, where clients must respect the window manager's role in resource arbitration. ICCCM defines four input focus models for clients to indicate their focus preferences via the input field in the WM_HINTS property and the presence or absence of the WM_TAKE_FOCUS client message protocol atom. In the No Input model, clients set the input field to False and omit WM_TAKE_FOCUS, signaling they do not accept (e.g., monitoring tools like xload). The Passive model sets input to True without WM_TAKE_FOCUS, allowing only when explicitly directed by the window manager. Locally Active clients set input to True and include WM_TAKE_FOCUS to manage within their subwindows, such as in applications with internal . Globally Active clients set input to False but include WM_TAKE_FOCUS for across multiple windows, like scroll bars in editors. Clients using SetInputFocus requests must specify revert_to Parent to return to the parent window upon release. These models dictate event delivery: for instance, EnterNotify and LeaveNotify events are generated based on pointer movement relative to the focus window, with NotifyPointer mode for pointer-relative . Pointer grabs and button/keyboard event handling follow strict ownership rules to avoid interference. Clients must establish button or key grabs only on windows they own, using GrabButton or GrabKey requests, and should release grabs promptly after use to minimize blocking other clients. Window managers enforce synchronous grabs in GrabModeSync and use AllowEvents with ReplayPointer or ReplayKeyboard modes to forward events to the grabbing client while permitting replays for verification. For keyboard events, clients receive KeyPress and KeyRelease only if they hold focus or have an active grab; otherwise, events propagate to the root window or focused client. Button events similarly route via pointer focus, with conventions prohibiting passive grabs on non-owned windows to prevent event theft. These mechanisms ensure that shared input devices like the pointer and keyboard deliver events predictably, with window states (e.g., withdrawn or iconic) briefly influencing focus eligibility as per client-to-window manager protocols. Colormap management conventions address shared visual resources by delegating installation to the while allowing clients to request changes. Clients notify the of colormap needs by setting the WM_COLORMAP_WINDOWS , listing subwindows requiring distinct colormaps in order (highest first), and must not InstallColormap or UninstallColormap requests except when holding an active pointer grab to avoid races. Upon a colormap change, clients send a ClientMessage event with the WM_COLORMAP_NOTIFY to the , which then installs the specified colormap for the affected window. Race conditions may arise if the 's InstallColormap executes concurrently with the client's notification, but the mitigates this by monitoring changes and prioritizing the list. The root window provides a default colormap that clients inherit unless overridden, ensuring basic color availability without explicit requests. These rules promote efficient sharing of limited colormap resources in pseudo-color visuals. Keyboard mapping and modifier key assignments are coordinated to prevent conflicts over shared input interpretations. Clients must avoid ChangeKeyboardMapping requests unless responding to actual hardware changes, instead relying on the server's initial mapping or user tools like xmodmap for adjustments. For modifier keys, clients assign KeySyms to unused modifier bits (e.g., Mod1 through Mod5) only if available, querying via GetModifierMapping to identify free slots. Non-reclaimable modifiers, such as those bound to fixed hardware functions, cannot be automatically reassigned by clients; users must manually reconfigure them using xmodmap to free bits for application-specific needs. This convention ensures that keyboard events, including modifier combinations in KeyPress deliveries, remain consistent across clients without one overriding another's mappings.

Implementations

Compliant Window Managers

The Inter-Client Communication Conventions Manual (ICCCM) defines compliance for window managers through adherence to specific protocols for client-to-window manager interactions, including proper handling of window properties such as , , and , as well as support for client messages, transient windows, and state transitions without violating core conventions. Full compliance requires implementing these elements to ensure interoperability with X clients, while partial compliance may involve basic support but extensions or omissions in advanced features. Historical implementations of ICCCM-compliant window managers emerged in the late 1980s and early alongside the X Window System's evolution. The Tab Window Manager (), released in 1989 as part of X11R4, was designed with full ICCCM compliance in mind, serving as the default window manager for early X distributions and supporting essential properties and protocols for manipulation and iconification. The (mwm), introduced in the early with the toolkit, achieved robust ICCCM compliance, enabling seamless integration with Motif-based applications through standardized decoration and session handling. Similarly, the Open Look Window Manager (olwm), developed by from 1988 to 1994, was explicitly ICCCM-compliant, incorporating the XView toolkit to provide consistent behavior for Open Look interfaces under X11R4 and later releases. The (Feeble Virtual Window Manager), first released in 1993, offered extensible ICCCM compliance via its system, allowing customization while maintaining support for 3D visuals, virtual desktops, and protocol adherence. In modern contexts, several window managers continue to prioritize ICCCM compliance, often extending it with the Extended Window Manager Hints (EWMH) for enhanced functionality. , developed in the 2000s, is a that strictly follows ICCCM standards, emphasizing minimal resource use and full support for client hints and protocols in desktop environments like . , the default for since the late 1990s, provides full ICCCM and EWMH compliance, including root window properties, application window states, and protocols for features like maximization and virtual desktops. Mutter, powering since 2007, maintains a compliant core implementation of ICCCM requirements, covering protocols, transient handling, and state management. For window managers, i3 (released in 2010) offers basic ICCCM compliance, supporting essential properties and client messages for window placement and focus while prioritizing manual workflows. Some window managers exhibit partial ICCCM compliance, extending beyond the standard with custom features that may not fully align with all protocols. (versions E16 from 2000 and E17 from 2008 onward) builds on ICCCM foundations but introduces advanced theming and that occasionally deviates from strict property handling, focusing on (EFL) integration. , a Lua-scripted since 2007, provides partial compliance by supporting core client classes and rules per ICCCM guidelines but emphasizes dynamic tiling and scripting over exhaustive protocol coverage.

Compliance Testing

Verifying adherence to the Inter-Client Communication Conventions Manual (ICCCM) in X11 applications and window managers typically involves a combination of manual inspection tools and automated testing frameworks to ensure proper handling of window properties, events, and interactions. Developers commonly use command-line utilities such as xprop to query and display window properties, allowing direct examination of ICCCM-required atoms like WM_STATE or WM_PROTOCOLS to confirm their correct format, type, and values. Similarly, xwininfo provides detailed information about window geometry, hierarchy, and attributes, which is essential for validating aspects of client-to-window manager communication, such as transient window relationships or size hints. These tools enable developers to select specific windows interactively or by ID and output raw data for analysis, facilitating spot checks during development without requiring full traces. For more systematic verification, automated test suites from X.org, such as the X Test Suite (XTS), offer property validation and protocol simulation capabilities tailored to X11 client-server interactions. XTS includes modules that simulate client behaviors, send requests like GetProperty or ChangeProperty, and assert expected responses, helping to catch deviations in ICCCM conventions like selection ownership or event propagation. These tests can be run in a controlled environment to replay sequences of X protocol messages, ensuring that applications respond correctly to scenarios outlined in the ICCCM, such as colormap installation or focus changes. Testing ICCCM compliance often reveals common , particularly race conditions in selection mechanisms where multiple clients attempt simultaneous transfers, potentially leading to lost data if timestamps are not handled precisely. Focus event ordering can also fail in edge cases, such as when SetInputFocus is applied to unmapped windows, resulting in incorrect notification sequences that violate the input focus model. State transitions present another challenge, where delays in processing WM_TAKE_FOCUS or window state changes can disrupt session management, emphasizing the need for robust implementations to maintain synchronization. Community resources on provide practical aids for self-assessment, including scripts and informal checklists derived from developer discussions that guide verification of ICCCM properties and behaviors. These materials, often shared via mailing lists or tool repositories, complement core utilities by offering example test harnesses for common scenarios, enabling developers to build custom validation routines.

Reception and Legacy

Adoption and Impact

The Inter-Client Communication Conventions Manual (ICCCM) was integrated into major desktop environments such as , , and starting in the late 1990s, shortly after their initial development, to standardize inter-client interactions and ensure consistent window management behaviors across applications. KDE's KWindowSystem module explicitly supports ICCCM manager selection and compliance for window properties like WM_CLASS. Similarly, GNOME's Mutter compositor handles ICCCM states such as Iconic to Normal transitions, while GTK's window management functions set ICCCM-compliant hints for focus and user attention. XFCE's settings and window manager configurations honor ICCCM focus hints to prevent unintended behaviors like focus stealing. This integration enabled these environments to provide reliable, uniform handling of window decorations, resizing, and session management without proprietary extensions. By defining standardized protocols for client-to-window manager communication, the ICCCM significantly improved application portability in the X11 ecosystem, reducing the need for developers to write window manager-specific code in toolkits such as Xt Intrinsics and . Xt Intrinsics, as the foundational library for many X11 widgets, leverages ICCCM conventions to abstract interactions like property settings and resource mediation, allowing applications to function across diverse s without custom adaptations. similarly uses ICCCM properties, such as WM_CLASS and accept_focus hints, to ensure cross-environment compatibility, minimizing fragmentation in graphical application development. This standardization fostered a more cohesive development landscape, where toolkits could focus on core functionality rather than accommodating varying window manager implementations. As a cornerstone of the X11 protocol since its Version 1.0 release in , the ICCCM has served as the foundation for countless X11 sessions on systems, underpinning graphical interfaces in environments from traditional workstations to modern servers and desktops as of 2025. Its conventions for selections, cut buffers, and session management have enabled seamless interoperability in billions of cumulative X11-based interactions across distributions and other Unix variants, sustaining legacy deployments in and scientific computing. Despite the rise of alternative display protocols, the ICCCM remains integral to X11's enduring role in ecosystems, supporting stable graphical operations in resource-constrained and contexts. As of November 2025, while major distributions like and have defaulted to , X11 and ICCCM compliance via XWayland continue to support legacy applications, though full Wayland-native equivalents are still evolving. Adoption of the ICCCM has evolved with the X11 landscape, maintaining high compliance in legacy software that relies on traditional window managers, while presenting mixed results in modern compositors during the transition to Wayland. Legacy X11 applications and toolkits continue to adhere closely to ICCCM protocols for reliable behavior under established window managers, ensuring backward compatibility in long-term Unix deployments. In Wayland environments, compatibility is achieved through XWayland, which emulates ICCCM functionality to run X11 clients, though native Wayland compositors like those in GNOME and KDE implement only partial equivalents via protocols such as wl_shell_surface, leading to inconsistencies for non-X11-native software. This hybrid approach supports ongoing ICCCM relevance but highlights challenges in fully migrating complex, standards-dependent legacy codebases.

Criticisms and Limitations

The Inter-Client Communication Conventions Manual (ICCCM) has been criticized for ambiguities in its specification, which have led to difficulties in readability and interpretation, resulting in inconsistent implementations across clients and window managers. The preface to explicitly acknowledges these issues, noting that the document underwent revisions to fix problems, enhance understandability, and clarify ambiguous wording in areas such as top-level window withdrawal and selection targets. These ambiguities stem from the manual's evolution, with multiple clarifications added over time to address semantic inconsistencies discovered post-initial drafts. Technical limitations in the ICCCM include race conditions during colormap installation, where the absence of timestamps in relevant protocol requests can lead to conflicts between clients and window managers attempting simultaneous installations. Additionally, focus events lack timestamps and previous-focus fields, complicating reliable tracking of input focus changes in dynamic environments. The specification also provides insufficient support for emerging features like multiple desktops, as its session management conventions do not adequately handle workspace-specific restorations or virtual desktop navigation. Achieving full compliance with the ICCCM proves challenging due to the of its protocols, which demand precise adherence from developers but often result in partial implementations; for instance, there is no built-in mechanism to reclaim non-preassigned modifier mappings, requiring manual intervention. These difficulties have contributed to widespread partial adherence among window managers and applications. As an older standard from the early , the ICCCM exhibits outdated aspects by not addressing window management or advanced theming capabilities, which became essential for modern environments in the 2000s. This prompted the development of extensions like the Extended Window Manager Hints (EWMH, also known as NetWM), which build upon the ICCCM to provide standardized support for these features, including multiple desktops and interactions.

References

  1. [1]
    Inter-Client Communication Conventions Manual - X.Org
    This document proposes suitable conventions without attempting to enforce any particular user interface.
  2. [2]
    [PDF] Inter-Client Communication Conventions Manual - X.Org
    To conform with the inter-client conventions, however, clients need deal with only these three selections: •. PRIMARY. •. SECONDARY. •. CLIPBOARD. Other ...
  3. [3]
    [PDF] Inter-Client Communication Conventions Manual
    The goal of the ICCCM Version 2.0 effort was to add new facilities, to fix problems with earlier drafts, and to improve readability and understandability, ...
  4. [4]
    Inter-Client Communication Conventions Manual - Christophe Tronche
    This document is the product of over two years of discussion among the members of the X Consortium's wmtalk working group.
  5. [5]
    The X11 inter‐client communication conventions manual - Widener
    The X11 Inter‐Client Communication Conventions Manual is a part of the X Window System standard. It provides guidelines for developers of interoperable X ...
  6. [6]
  7. [7]
  8. [8]
  9. [9]
  10. [10]
  11. [11]
  12. [12]
    X Session Management Protocol - X.Org
    The purpose of the X Session Management Protocol (XSMP) is to provide a uniform mechanism for users to save and restore their sessions.
  13. [13]
  14. [14]
  15. [15]
  16. [16]
  17. [17]
  18. [18]
  19. [19]
  20. [20]
  21. [21]
  22. [22]
  23. [23]
  24. [24]
  25. [25]
  26. [26]
  27. [27]
  28. [28]
  29. [29]
  30. [30]
    Matchbox: Window Management Not for the Desktop - USENIX
    As far as a window manager is concerned, ICCCM compliance largely revolves around correctly interpreting application requests and sending the right messages ...X Window Management · Basic Window Management · Included Utilities<|control11|><|separator|>
  31. [31]
    RELNOTES.txt - X.Org
    The core twm window --- manager, as well as the user-contributed gwm ... Like gwm and olwm, tekwm is believed to --- ---- ----- be ICCCM-compliant.
  32. [32]
    Motif 2.1 Data Sheet - The Open Group
    It is compliant with the X Consortium Inter-client Communications and Conventions Manual (ICCCM) and includes support for X11R6 session management. As a result, ...
  33. [33]
    X11R4 - X.Org
    Dec 7, 2014 · The core twm window manager, as well as the user-contributed gwm, olwm, and tekwm window managers, is intended to be be compliant. X11 Non ...
  34. [34]
    FVWM
    Fvwm is a ICCCM/EWMH compliant and highly configurable floating window manager built primarily using Xlib. Fvwm is configured using a configuration file ...New to Fvwm · Fvwm Community · The Official Fvwm FAQ · Fvwm3 Manual Pages
  35. [35]
    Openbox:Credits
    Openbox aims to be extremely standards compliant, following the ICCCM standard strictly, as well as throughly implementing support for the freedesktop.org ...<|separator|>
  36. [36]
    Projects/KWin - KDE TechBase
    Feb 18, 2022 · COMPLIANCE - a document on KWin's compliance to the window manager specifications ICCCM and EWMH (also known as NETWM). KDE4.0 release notes ...
  37. [37]
    COMPLIANCE ... - GitLab - GNOME
    2) EWMH Compliance. a. Root Window Properties. b. Root Window Messages. c. Application Window Properties. d. Window Manager Protocols. 3) ICCCM Compliance. 1 ...
  38. [38]
    i3 User's Guide
    This document contains all the information you need to configure and use the i3 window manager. If it does not you can contact us on GitHub Discussions, IRC, or ...
  39. [39]
  40. [40]
    Coreclassmod client - awesome API documentation
    If your applications change their classes, please report a bug to them and point to ICCCM §4.1.2.5. It tends to break ruled.client and other AwesomeWM APIs.<|separator|>
  41. [41]
    XPROP - X.Org
    The string is assumed to be in an ICCCM compliant encoding and is converted to the current locale encoding before being output. u. This field and the next ...
  42. [42]
    Using the X Test Suite - X.Org
    Sep 30, 2024 · This tool takes the output logs of tests that generate image comparisons, remaps the pixel values to visibly different colors, and generates pngs for the two.Missing: ICCCM | Show results with:ICCCM
  43. [43]
    X Testing Software - Freedesktop.org
    May 7, 2021 · This page provides infomation on various tools to aid the testing ( and to a degree, debugging ) of X Servers and Clients.
  44. [44]
  45. [45]
    KWindowSystem C++ Classes | KWindowSystem
    ICCCM manager selection owner. KSelectionWatcher. ICCCM manager selection watching. KStartupInfo. Class for manipulating the application startup notification.
  46. [46]
    How to switch from window state Iconic to Normal? - GitLab - GNOME
    Jun 12, 2018 · ICCCM states Iconic -> Normal - The client should map the window.
  47. [47]
    Gdk.Window.set_accept_focus
    On X, it is the responsibility of the window manager to interpret this hint. ICCCM-compliant window manager usually respect it. Available since: 2.4. [−] ...
  48. [48]
    [Solved] Settings Help / General discussion / Xfce Forums
    May 15, 2015 · This prevents this from happening. - Honor Standard ICCCM focus hint -> this one I don't fully understand. More information can be found ...
  49. [49]
    4. Client to Window Manager Communication - Christophe Tronche
    4. Client to Window Manager Communication. To permit window managers to perform their role of mediating the competing demands for resources such as screen space ...
  50. [50]
    [PDF] X Toolkit Intrinsics — C Language Interface
    To increase the portability of widget and application source code between different system envi- ronments, the Intrinsics define several types whose precise ...Missing: ICCCM GTK
  51. [51]
    Gtk.Window.set_wmclass
    It sets the X Window System “class” and “name” hints for a window. According to the ICCCM, you should always set these to the same value for all windows in an ...
  52. [52]
    X Window System - Wikipedia
    X originated as part of Project Athena at Massachusetts Institute of Technology (MIT) in 1984. The X protocol has been at version 11 (hence "X11") since ...X server · Core protocol · W Window System · X.Org FoundationMissing: wmtalk | Show results with:wmtalk
  53. [53]
    How X Window Managers Work, and How to Write One (2014)
    Nov 3, 2021 · >The ICCCM is unbelievably dense, it must be followed to the last letter, and it still doesn't work. ICCCM compliance is one of the most ...<|control11|><|separator|>
  54. [54]
    Wayland features - Fedora Project Wiki
    X11 is not longer a requirement for GNOME Shell/mutter with Wayland. Xwayland is started on-demand by default since GNOME 40 when an X11 client needs it and ...
  55. [55]
  56. [56]
    Extended Window Manager Hints - Freedesktop.org Specifications
    Nov 29, 2011 · This spec defines interactions between window managers, compositing managers, applications, and the utilities that form part of a desktop environment.1 Introduction # · 1.2 What Is This Spec? # · 1.3 Language Used In This...