Archive for March, 2005

Reflections on God and Evil

I am not a religious person but yet I consider myself a religious person at some level. I have read that when he was asked “Is there God”, Buddha refused to answer the question. Buddhism doesn’t formally talk about God at all. Advaita, one of the schools of thought in Hinduism (probably inspired by Buddhism), declares that “God is Self”, a concept I will return to shortly. In my mind, the concept of God is the epitome of abstraction. Since software engineering is about abstraction piled on top of abstraction, perhaps it is natural to wonder about this particular abstraction.

A common statement by a religious person, such as “God will punish the evil doer” could be interpreted in a very superficial level - there is a God in heaven, who will send a plague or cause an accident or send down lightning or whatever to punish someone doing evil. Yet, common every day experience teaches us that this statement cannot be proved at all, even in a statistical sense. First of all, who is an evil doer? Since that question is logically undecidable (i.e there is no algorithm that, given an arbitrary action by a human being, can decide whether that action is evil or not), debating it is not even worth the time.

You would think we can all agree on some specific actions that seem fundamentally evil. As an example, killing an innocent kid is evil, no matter under what circumstance, right? Yet, what about a mother, facing utter misery and starvation and trapped in a situation without any hope (alas, not uncommon in this world), choosing to end her kids’ life rather than let the kids starve to death? Would a just God punish that mother?

Yet there is an abstract sense in which “God will punish the evil doer” makes sense - but it requires a certain meditative, near-religious, non-logical way of looking at it. It is very hard to capture this in words, but I will try. Because I am thinking so hard about syntax (the surface form of a sentence) and semantics (the meaning, which is an elusive concept), I am parsing this sentence to get at the abstraction behind it.

As a first step, let us assume that “God” is a syntactic short-hand for an abstract concept. Assume that the icons or idols are just ways to fix that concept in our head - some religions prohibit such icons or idols, but in that case the word itself becomes the concept - and for some people, the way the word is rendered becomes a mental substitute for an icon.

So what is that abstract concept behind that word? I suggest that this is short-hand for “self-reflection”. Advaita asserts that “God is Self”, and I think “God is your self-reflection” or “God is your self-analysis” comes close to capturing that spirit.

What exactly is self-reflection? I suggest that it is the process for “deciding the undecidable”, a notion that just sounds completely absurd. Clearly, this process cannot use logic because “the undecidable” is clearly beyond logical reasoning. We can also use alternative syntactic words for “undecidable” - “unknowable” or “uncontrollable” or “beyond logic and reason” or “unfathomable” and so on, but all of them refer to the same Computer Science notion of “logically undecidable”.

Now that I have waved my hand around that, time for more abstractions: “evil” is an abstract concept for what you, in your own mind, consider as evil. “Punishment” is an abstract concept for what you, in your own mind, consider as punishment. Since these concepts are logically undecidable, debating them is utterly fruitless.

So “God will punish the evil doer” can be translated as “Upon self-reflection, you will experience what your mind will consider as punishment when you perform an action that your own self-reflection considers evil”. See how hard that sentence has become? The syntactic short-hand “God will punish the evil doer” is a lot more accessible - user-friendly, in software parlance. No wonder that is how it is commonly stated.

So that capacity for self-reflection is what introduces “God” for us. Meditation, prayer, contemplation are pathways to “God” (notice how I am using the syntactic shorthands liberally now). Hindu thought holds that there are many equivalent ways to reach “God”, and that starts to make sense too.

The trials and tribulations of "Heisenbugs"

[ Mood: Fed Up With Life ]
We have been struggling with a memory leak in OpManager, that seems to happen under some relatively rare circumstances. It is documented in

http://forums.adventnet.com/viewtopic.php?t=1641&highlight=

and in

http://forums.adventnet.com/viewtopic.php?p=4825

It was damn hard to reproduce this bug, and only after a customer kindly shared their OpManager database were we able to reproduce it. But that hasn’t made it any easier to pin it down. It takes a few hours to manifest itself, so the turn around time is just excruciatingly slow. Second, memory profiling tools have been ineffective because, sure enough, the leak won’t happen when you are looking for it - the classic definition of a Heisenbug. The most likely culprit in that case is a timing and thread related issue.

We think we are close to swatting this nasty bug, but the nature of this bug makes it hard to be very certain. Customers are anxiously waiting - and that adds to the tension for the developers.

And, the sad reality is, there is no silver bullet here. The combinatorial explosion of potential pathways in software indicates that no matter how comprehensive our testing is, something like this is likely to happen once in a while. Fortunately, it is rare, but when it happens, it is just utter misery.

Incompatible Linux Distributions

We aim to support as broad a variety of platforms as we can with our software. It is good for customers and good for our software quality - we tend to design software better knowing that it has to run on multiple platforms.

But the Linux distribution situation drives us up a wall. I remember that 7-8 years ago, we were fighting libc incompatibilies. 2005, and the situation looks just as bad. I am not sure anyone wins (OK, I know one company that wins if Linux loses ;-)). I don’t understand the “differentiation” here. Wouldn’t a less popular distribution benefit by making sure all the software that runs on a more popular distribution will work without modification on theirs too? Won’t that be a force for compatibility and standardization?

Does anyone know a good way to support the top 3-4 Linux distributions with a minimum of pain? It looks like we need to create at least 2-3 packages for Linux, tailored to different distributions (and versions, that is another horror!).