An uncomfortable question
squeak-dev at lists.squeakfoundation.org
Thu Oct 31 09:09:09 UTC 2002
On Wednesday, October 30, 2002, at 05:33 PM, Swan, Dean wrote:
> Consider the case where there are dependencies between the modules and
> more than one version of each module. The current effort of
> implementing modules is attempting to deal with these issues, and it
> is a non-trivial problem. It is also possible that because of certain
> interdependencies between different versions of different modules that
> some modules may become mutually incompatible. This situation is
> witnessed with MS Windows .DLL libraries quite often.
> One common effect is that some applications have to be installed on a
> Windows machine in a particular order in order for them to all
> function properly on the same machine. There can arise instances
> where because of different sets of .DLL versions required, a set of
> applications may not all function correctly on one machine.
Well sure, incompatibilities between different parts of the system is
always a danger. Certain parts of the system expect particular
behaviour from other parts of the system. If you make changes you run
the risk of violating those expectations. This is true whether those
parts are modules, classes, functions or DLLs.
The nice thing about Squeak is that you can have multiple images lying
around. So if you need different versions of a module in different
situations, you do that without having to say, swap out your hard drive
when switching between applications.
Now, this is not to say that dependency tracking, versioning and so on
is a non-issue. It is a problem that we're going to have to address.
But the ability to build images for specific purposes is a mitigating
factor. So when we do have incompatibilities between modules - and it
will happen - instead of "hell" we're faced with a mere problem.
> And regarding SqueakMap and DVS, realize that these are based on the
> monolithic image model. They are more or less fancy user interfaces
> to manage filing in the various change sets (I know I'm
> oversimplifying a bit, but the point is still valid).
Hmm. It sounds like we have different definitions of "monolithic." When
I speak of modularizing the image I mean grouping the code into
clusters of classes and methods that a) provide a distinct and coherent
piece of functionality, and b) interact with other clusters through
well defined interfaces. Once that's accomplished (and yes, it's a
non-trivial task) many of the clusters can be removed from the base
image and maintained separately.
I place that scenario opposite the "monolithic" system used by Squeak
3.2. Everything is really intertwined and you can't easily remove any
functionality from the image. Adding functionality is easier, but still
quite a hassle because of the some what artificial distinction between
"blessed" code that's maintained by SqC and other stuff, which is
floating around in ChangeSets.
So again, I don't think I understand your concern. Are you saying that
you prefer the SM/DVS route to 3.3 modules? How do you define "modular"
As to SqueakMap and DVS, sure. They really are just tools to make it
easier to move code in and out of images. But that's the point! The
whole problem here is that it's difficult to manage code.
> Of course, monolithic systems have the issue of shared namespaces
> which can make it difficult to make different packages play nice
> together in the same image, so like I said, the problem is > non-trivial.
> While it would certainly be possible to produce an MPEG player image,
> with only the items necessary to play MPEGs, and a MIDI image with
> only the items needed for MIDI processing, and so on, factoring out
> the common components can be difficult. This is especially true when
> some "applications" use different versions of a particular component
> and rely on some characteristic behavior. A hardware example of this
> is the 4046 phase locked loop IC. It is a fairly standard part, BUT
> the Motorola Version and the Philips versions are incompatible in that
> the external timing components require different values to get the
> same frequency out of the two parts. The same kind of thing can
> happen in software.
No, it's not trivial, but it can be solved, and it's not even all that
For one thing, the package model used by DVS makes the problem easier
by virtue of its inflexibility. A given package can contain classes and
methods. When a package is loaded, it can create classes and it can add
methods to existing classes. It cannot modify methods belonging to
another package, and it can't delete methods. So it avoids all kinds of
problems that can arise when modules can modify each other.
A second factor that makes the problem tractable is that Squeak images
offer developers much more control over the execution environment than,
say, a desktop operating system. For development, you can build an
image that has exactly the configuration you need - all the right
packages, of the right versions, loaded in the correct order. For
deployment, you just distribute that image. There's no need to have
users load your package into whatever randomly configured system they
happen to be running. That's the situation that creates DLL hell and it
just doesn't apply to Squeak.
And finally, if you do run into a compatibility problem, just fix it!
The source code is there, there's a community of people willing to
help, and with SqueakMap and DVS, you've got the tools to easily
distribute your fix to the rest of the community and to easily benefit
from their efforts. As Daniel mentioned, we've got a social advantage
over the commercial world.
More information about the Squeak-dev