Although the MIT Widget Model has some very attractive features it is not completely suited to providing network transparent device access. The Widget Model was invented mainly to provide a toolkit for high level X11 programming. Widgets are created and destroyed locally in a program. They don't belong to more than one process at a time. Their main purpose is to hide the complexity of X11 programming behind a simple to manage and understand interface. The device access problem in a distributed control system is a more critical global problem. It has to provide network access to a wide variety of different devices. There is only one copy of each device but there may be many clients at any one time. Errors from devices have to be correctly treated and recovered from - it doesn't help to simply kill the program and restart it. On the other hand there are features of the Widget Model which are compatible with the DSM however.
Instead of reinventing the wheel therefore it was decided to use the MIT Widget model as much as possible and only write/modify those parts which either did not exist or were not suited to the device server model.
Amongst those items which were adopted are (1) the Widget naming convention, (2) the organisation of the private include files, public include files and source code files and (3) the implementation of classes by structures. Amongst those things which were added are (1) a method finder which supports inheritance of methods by subclasses from superclasses, (2) a network manager and (3) a database accessible over the network. The remote database replaces the X11 resource database which is implemented in the X Server. The database is accessible over the network via a database server. The Widget root class ( CoreClass) has been replaced by a new root class (the DevServerClass). DevServerClass has been designed to deal with the network and its resources instead of graphics. It implements (a) the remote procedure calls for the network access, (b) creates a connection to the static database (so the resources can be accessed), (c) keeps a list of exported devices (so that network clients can import devices). It also implements a number of standard methods required for the DSM (e.g. DevMethodCommandHandler, DevMethodExport, DevMethodDestroy).