Sunday, March 25, 2007

My first open source code change

For a person who has used open source for 7 years, and given the fact that I've been a programmer, it is a big shame that I'd never programmed open source. It all changed last week.

Our department email server used Postfix aliases, but I wanted to configure something that doesn't require a super-user access whenever anyone wanted to add/modify the membership. In other words, I wanted to disintermediate the sysad, and give power to those people who actually take the decisions. If there is a new visiting faculty, the office should be able to change the faculty list membership, rather than wait for the sysad, who might have more important things to do. Every email to the respective classes, or to the faculty or to staff, or to the alumni, all had to go through this software. After investigating a bit, I installed GNU Mailman to handle the aliases.

Immediately, people began to report problems. All the vacation/bounce messages got sent to the list administrator (that is, me) and not to the person who sent the email. This meant that the person who sent the email didn't even know whether the recipient had actually received the email or not. And complaints kept pouring in, especially from the alumni team, till my lazy self couldn't tolerate it much longer.

My objective was to use the lists as a transparent form of aliasing. For instance, second-year must send emails to all students in their second year. Nobody wants to know about the mailing list manager. I wanted to ensure that the sender of the mail is not changed - Mailman always changes "Sender" to -bounces, so that it becomes a catch-all filter for all the bounces and hopes that clients recognize "Reply-To" header to send replies. I absolutely didn't need mailman to overwrite actionable mail headers.

I found out there was no configuration option for what I wanted. On the mailman mailing lists, people were worried about RFC 2822 interpretation, and hence didn't want to do anything. I'd implemented RFC 821/822 (previous avatar of the above RFC) as a course project way back in 2002, but I didn't have time to go over the new RFC again - not even in the final month in a b-school :)

As always, the RFC had (this is my guess) a few assumptions which didn't apply to my case. It assumed that I would be running a large mailing list (like LKML for instance) of people not knowing each other. Therefore, bounces should go to the moderator or list administrator. Having read the RFCs on DNS, HTTP, HTTP Cookies from start to end, top to bottom, and reverse, and having seen first-hand the problems of a non-RFC compliant browsers during my professional career, I could not under-estimate the effects of RFC violations. But, what the heck, I've got a problem to solve, and politicking about some stupid RFC didn't solve the problem. Violating RFC is not a blasphemy. Take, for instance, the case of HTTP 302 redirect. Or the fact that despite RFC 2109, nobody is sure whether to use Netscape cookies or Version 1 cookies. Thus emboldened, I decided to to do some code changes.

My incredible confidence (some might call it arrogance) as an erstwhile kernel/network programmer and the stupid courage to take on a foreign language (Mailman is written in Python) helped in getting started. After a couple of grep's, I narrowed down on the offending code segment. After a couple of glances, I could immediately understand that I just had to change one function argument when calling deliverfunc in Process(): change the envsender (the Envelope sender) to origsender (the original sender). Though this was on a live functioning system handling more than 5K emails per day (including spams), I just went ahead and did the change. Problem solved. Next thing is to get on the mailman mailing lists and tell people about this.

This was my first practical non-commercial code change. It wasn't much. It is probably very trivial. But as Neil Armstrong said "one small step for ..." - I wouldn't complete it. Maybe I should do some open source coding as a hobby. Open source programming must also be done by users - it is too serious a thing to be done by just programmers.

Now, let me start studying for the mid-term in World Class Manufacturing Strategies course tomorrow ...

Labels: , , , , , , , , ,


At Monday, 10 November, 2008 at 8:07:00 PM IST, Anonymous Randilyn said...

Interesting to know.


Post a Comment

Links to this post:

Create a Link

<< Home