Home > Articles > Operating Systems, Server > Linux/UNIX/Open Source

Background

A fundamental design decision for the X Window system was to permit an arbitrary user-level program to manage the various application windows. This open architecture permits great flexibility in the way windows look and behave.

Window Managers

X Window managers are complex applications. They are responsible for decorating top-level application windows (such as drawing labeled title bars with buttons), permitting resizing and moving windows, "iconifying," tiling, cascading windows, and much more. Many Xlib library functions wrapping the X protocol are specific to the special needs of window managers. Because our goal is to do interesting research beyond that of modern window managers, we used an existing popular window manager—FVWM2—as our starting point. (See http://www.plig.org/xwinman/ for links to other window managers.)

When I began the SCWM project with Maciej Stachowiak in 1997, FVWM2 was arguably the most used window manager in the X Window community. It supports flexible configuration capabilities via a per-user .FVWM2rc file that is loaded once when FVWM2 starts. In order to tweak a parameter, end users edit their .FVWM2rc files using an ordinary text editor, save the changes, and then restart the window manager to activate the change. The FVWM2 configuration language supports a very restricted form of functional abstraction, but it lacks loops and conditionals.

Despite these shortcomings, FVWM2 provides adequate control over the look of windows, and it has evolved over the years to meet complex specifications (such as the Interclient Communication Conventions Manual, or ICCCM) and deal with the innumerable quirks of applications. By basing SCWM on FVWM2, we leveraged those capabilities and ensured that SCWM was at least as well-behaved as FVWM2. Our fundamental change to FVWM2 was to replace its ad-hoc configuration language with Guile/Scheme.

Guile

Guile is the GNU Ubiquitous Intelligent Language for Extension. The GNU project designed it specifically for use as an embedded interpreter. Scheme is a very simple, elegant dialect of the long-popular Lisp programming language. This dialect is easy to learn, and it provides exceptionally powerful abstraction capabilities such as higher-order functions, lexically scoped closures, and a hygienic macro system. Guile extends beyond the standard Scheme language with its module system and numerous wrappers for system libraries (such as POSIX file operations). The implementation of Guile is based on Aubrey Jaffer's SCM Scheme interpreter. Guile is highly efficient and remains under constant development. At the time of this writing, the most recent stable version is Guile 1.3.4.

Constraints

The third important component of SCWM is the Cassowary constraint-solving engine. Window managers are responsible for arranging the various top-level windows on a single shared display. This is essentially a two-dimensional layout problem, and similar problems have benefited from the application of a technology called constraints.

A constraint is simply a mathematical description of a relationship between two objects. It is often a relationship that we desire to hold true. For example, Netscape's Find dialog box often pops up in an undesirable location, therefore hiding the content on the page that you intend to search. A simple constraint that addresses this problem is for the northeast corner of the Find dialog box to stay at the same onscreen location as the northeast corner of the main Netscape browser window. Mathematically, we can write:

NFind.ne.x = NBrowser.ne.x  AND  NFind.ne.y = NBrowser.ne.y

In this pair of equations, we use NFind and NBrowser to refer to the Netscape Find and Browser windows, respectively. The .ne.x simply refers to the X coordinate of the northeast corner of a window. Similarly, .ne.y refers to the Y coordinate of that corner. Thus, the equations constrain the northeast corners of the two windows to exactly the same location—both the X and Y coordinates must match. Solving this "system" of constraints involves picking actual values for each of the variables in order to maintain the relationship. There are infinitely many solutions to these constraints, one of which is shown here:

  NFind.ne.x = 600  NBrowser.ne.x = 600  NFind.ne.y = 250  NBrowser.ne.y = 250

Constraints can involve anything that can be expressed precisely, but in order for them to be solvable, we must restrict how much expressiveness we permit in the constraints we consider. In the above constraints, each of the values being related is simply an integer screen coordinate. Also notice that we are interested in the conjunction of two simpler constraints: that the X coordinates are the same, and that the Y coordinates are the same. As it turns out, conjunctions of equality constraints are especially easy to solve programmatically.

The primary benefit of automatic constraint-solving is that it permits a declarative specification of behavior that we desire. We can simply express what relationships we wish to hold without detailing how those relationships should be maintained. In our Netscape windows example, we can simply list a conjunction of two constraints and leave to the constraint solver the task of continually assigning values to the variables. SCWM does exactly this by embedding the Cassowary Constraint Solving Toolkit. Cassowary implements a sophisticated constraint-solving algorithm that can handle systems of arbitrary linear equalities and inequalities. Our example constraints fall well within the capabilities of Cassowary.

With SCWM, if we add our example constraints to the system and then move the Netscape browser window around the screen, the Find dialog box also moves, keeping its northeast corner coincident with the browser's northeast corner. In contrast, an ordinary window manager would have to do so "imperatively" (or "procedurally") in order to achieve this behavior—for example, by having a snippet of code run whenever the Browser window is moved, and a different snippet of code run whenever the Find dialog box is moved. Each of those code fragments would just move the other window to the appropriate location. Although the procedural approach is tenable for very simple constraints, such as equalities, more sophisticated constraint techniques become necessary when dealing with greater numbers of relationships or more complex relationships, such as inequalities (for example, I want the Find window to stay to the right of my Browser window).

Because you probably do not want to write mathematical equations and inequalities for your window manager in order to lay out your windows, SCWM provides a graphical user interface for specifying a large class of relationships that its Cassowary constraint solver can handle. See the section "User Interface for Constraints" for more information.

InformIT Promotional Mailings & Special Offers

I would like to receive exclusive offers and hear about products from InformIT and its family of brands. I can unsubscribe at any time.

Overview


Pearson Education, Inc., 221 River Street, Hoboken, New Jersey 07030, (Pearson) presents this site to provide information about products and services that can be purchased through this site.

This privacy notice provides an overview of our commitment to privacy and describes how we collect, protect, use and share personal information collected through this site. Please note that other Pearson websites and online products and services have their own separate privacy policies.

Collection and Use of Information


To conduct business and deliver products and services, Pearson collects and uses personal information in several ways in connection with this site, including:

Questions and Inquiries

For inquiries and questions, we collect the inquiry or question, together with name, contact details (email address, phone number and mailing address) and any other additional information voluntarily submitted to us through a Contact Us form or an email. We use this information to address the inquiry and respond to the question.

Online Store

For orders and purchases placed through our online store on this site, we collect order details, name, institution name and address (if applicable), email address, phone number, shipping and billing addresses, credit/debit card information, shipping options and any instructions. We use this information to complete transactions, fulfill orders, communicate with individuals placing orders or visiting the online store, and for related purposes.

Surveys

Pearson may offer opportunities to provide feedback or participate in surveys, including surveys evaluating Pearson products, services or sites. Participation is voluntary. Pearson collects information requested in the survey questions and uses the information to evaluate, support, maintain and improve products, services or sites, develop new products and services, conduct educational research and for other purposes specified in the survey.

Contests and Drawings

Occasionally, we may sponsor a contest or drawing. Participation is optional. Pearson collects name, contact information and other information specified on the entry form for the contest or drawing to conduct the contest or drawing. Pearson may collect additional personal information from the winners of a contest or drawing in order to award the prize and for tax reporting purposes, as required by law.

Newsletters

If you have elected to receive email newsletters or promotional mailings and special offers but want to unsubscribe, simply email information@informit.com.

Service Announcements

On rare occasions it is necessary to send out a strictly service related announcement. For instance, if our service is temporarily suspended for maintenance we might send users an email. Generally, users may not opt-out of these communications, though they can deactivate their account information. However, these communications are not promotional in nature.

Customer Service

We communicate with users on a regular basis to provide requested services and in regard to issues relating to their account we reply via email or phone in accordance with the users' wishes when a user submits their information through our Contact Us form.

Other Collection and Use of Information


Application and System Logs

Pearson automatically collects log data to help ensure the delivery, availability and security of this site. Log data may include technical information about how a user or visitor connected to this site, such as browser type, type of computer/device, operating system, internet service provider and IP address. We use this information for support purposes and to monitor the health of the site, identify problems, improve service, detect unauthorized access and fraudulent activity, prevent and respond to security incidents and appropriately scale computing resources.

Web Analytics

Pearson may use third party web trend analytical services, including Google Analytics, to collect visitor information, such as IP addresses, browser types, referring pages, pages visited and time spent on a particular site. While these analytical services collect and report information on an anonymous basis, they may use cookies to gather web trend information. The information gathered may enable Pearson (but not the third party web trend services) to link information with application and system log data. Pearson uses this information for system administration and to identify problems, improve service, detect unauthorized access and fraudulent activity, prevent and respond to security incidents, appropriately scale computing resources and otherwise support and deliver this site and its services.

Cookies and Related Technologies

This site uses cookies and similar technologies to personalize content, measure traffic patterns, control security, track use and access of information on this site, and provide interest-based messages and advertising. Users can manage and block the use of cookies through their browser. Disabling or blocking certain cookies may limit the functionality of this site.

Do Not Track

This site currently does not respond to Do Not Track signals.

Security


Pearson uses appropriate physical, administrative and technical security measures to protect personal information from unauthorized access, use and disclosure.

Children


This site is not directed to children under the age of 13.

Marketing


Pearson may send or direct marketing communications to users, provided that

  • Pearson will not use personal information collected or processed as a K-12 school service provider for the purpose of directed or targeted advertising.
  • Such marketing is consistent with applicable law and Pearson's legal obligations.
  • Pearson will not knowingly direct or send marketing communications to an individual who has expressed a preference not to receive marketing.
  • Where required by applicable law, express or implied consent to marketing exists and has not been withdrawn.

Pearson may provide personal information to a third party service provider on a restricted basis to provide marketing solely on behalf of Pearson or an affiliate or customer for whom Pearson is a service provider. Marketing preferences may be changed at any time.

Correcting/Updating Personal Information


If a user's personally identifiable information changes (such as your postal address or email address), we provide a way to correct or update that user's personal data provided to us. This can be done on the Account page. If a user no longer desires our service and desires to delete his or her account, please contact us at customer-service@informit.com and we will process the deletion of a user's account.

Choice/Opt-out


Users can always make an informed choice as to whether they should proceed with certain services offered by InformIT. If you choose to remove yourself from our mailing list(s) simply visit the following page and uncheck any communication you no longer want to receive: www.informit.com/u.aspx.

Sale of Personal Information


Pearson does not rent or sell personal information in exchange for any payment of money.

While Pearson does not sell personal information, as defined in Nevada law, Nevada residents may email a request for no sale of their personal information to NevadaDesignatedRequest@pearson.com.

Supplemental Privacy Statement for California Residents


California residents should read our Supplemental privacy statement for California residents in conjunction with this Privacy Notice. The Supplemental privacy statement for California residents explains Pearson's commitment to comply with California law and applies to personal information of California residents collected in connection with this site and the Services.

Sharing and Disclosure


Pearson may disclose personal information, as follows:

  • As required by law.
  • With the consent of the individual (or their parent, if the individual is a minor)
  • In response to a subpoena, court order or legal process, to the extent permitted or required by law
  • To protect the security and safety of individuals, data, assets and systems, consistent with applicable law
  • In connection the sale, joint venture or other transfer of some or all of its company or assets, subject to the provisions of this Privacy Notice
  • To investigate or address actual or suspected fraud or other illegal activities
  • To exercise its legal rights, including enforcement of the Terms of Use for this site or another contract
  • To affiliated Pearson companies and other companies and organizations who perform work for Pearson and are obligated to protect the privacy of personal information consistent with this Privacy Notice
  • To a school, organization, company or government agency, where Pearson collects or processes the personal information in a school setting or on behalf of such organization, company or government agency.

Links


This web site contains links to other sites. Please be aware that we are not responsible for the privacy practices of such other sites. We encourage our users to be aware when they leave our site and to read the privacy statements of each and every web site that collects Personal Information. This privacy statement applies solely to information collected by this web site.

Requests and Contact


Please contact us about this Privacy Notice or if you have any requests or questions relating to the privacy of your personal information.

Changes to this Privacy Notice


We may revise this Privacy Notice through an updated posting. We will identify the effective date of the revision in the posting. Often, updates are made to provide greater clarity or to comply with changes in regulatory requirements. If the updates involve material changes to the collection, protection, use or disclosure of Personal Information, Pearson will provide notice of the change through a conspicuous notice on this site or other appropriate way. Continued use of the site after the effective date of a posted revision evidences acceptance. Please contact us if you have questions or concerns about the Privacy Notice or any objection to any revisions.

Last Update: November 17, 2020