Is there any promising work on conceptualizing the abstractions of GUIs? It's easy to make a binding thick enough to cover the calling sequences, naming, etc differences between GUIs for different OSes, but once you try to support 50 *different* styles for a window border on each OS, portability goes down the tubes in a hurry. A GUI builder tool can certainly customize, to the OS at hand, borders of windows, but what about menus vs listboxes vs palettes as selection devices? It's trivially easy for a GUI vendor to add little goodies that lock a user, and a binding, into his system. Is there a good way to program in terms of 'now let the user enter text, now select from these choices, now indicate a position with the mouse, ...' and separate out the particular widgets that enter text, do different kinds of choice selections, etc?