Ethics concerns relations towards some external group (eg, CustomerBillOfRights). Morality concerns relations between the group's members. So what are the obligations programmers have towards each other?
rant deleted
I don't consider using the StateOfTheArt a moral obligation in any sense--in many applications, use of the TriedAndTrue is the morally correct stance. It certainly can be argued that if use of TriedAndTrue is more likely to make the customer happy.
And use of the term MorallyReprehensible? for creating a frigging operating system is just plain bizarre. Public figures like OsamaBinLaden, GeorgeBush, ArielSharon, JacquesChirac?, and the like are morally reprehensible for some of their actions--which may or may not have resulted in folks getting killed. (Certainly in several of the above--I don't want to turn this page into a political one). Likewise for numerous other leaders, businesspeople, common criminals, terrorists, etc. who leave death, destruction, and misery in their wake. Likewise for folks who engage in activies such as outright lying, cheating, and stealing.
But calling someone "morally reprehensible" for writing an OS which doesn't use the technological fad of the day? Ridiculous. This of course puts the author of this page in the same boat as AndrewTannenbaum?, who widely criticized Linus for not making Linux a MicroKernel (though there is MkLinux). Microkernels were the research fad of the day in operating systems; lots of PeeAitchDee?s were fond of pontificating on just how superior they were. And mebbe so...however, the MicroKernelWar? seems to have reached a ceasefire with no clear winner. Microkernels (Mach, Qnx, a few others) are widely used, but so are monolithic kernels. The microkernel is a valid way to structure an OS, but not the only valid way. Which makes all the SturmUndDrang? coming from the microkernel camp sound silly.
Much of the anti-Linux chest-beating above smells suspiciously similar... (that chest-beating deleted)
Everyone using "tried and true" is why we're stuck with 30 year old technology (eg, no CapabilitySecurityModel). Note that there is a world of difference between Bleeding Edge and State Of The Art. State Of The Art certainly includes anything that's been solidly established in several research systems.
As for the Mk vs Mono war, Mk were shown to be AbstractionInversions and obsoleted by ExoKernels. While the research guys went even further out, beyond mere microkernels, the "hard eyed pragmatists" are still whining about how microkernels haven't been proven. In fact, microkernels are currently popular among the production boys because they allow the creation of black box closed-source subparts.
(more ranting deleted)
You could equally argue that these brilliant researchers are committing a sin of omission by discovering these wonderful new technologies, and not turning them into something useable by the people that create mission-critical and life-critical systems.
I seem to recall that it (Linux) started as more of an academic exercise than anything else. Linus and I were of a similar frame of mind at a similar time; we both wanted tools that let us do more advanced work than the PC of the day allowed. He wrote his own, I installed OS/2. His survived and I'm using it now. And what's "30 years behind state of the art" anyway? I wouldn't even consider any Microsoft product to be in the "state of the art" category. No one who'd actually been through a CS program would have back when the PC was first becoming popular. Microsoft hasn't even caught up to where DEC was a decade ago. Should Linus have implemented VMS instead?
Now I have another one for you. Is any programmer working for SCO, knowing full well that his company is trying to steal or destroy the thousands of man-hours invested in Linux, morally reprehensible? Discuss... --BruceIde
Yes, unless their material needs (food, clothing and shelter) require their staying at SCO. Of course, that isn't very likely.
If a company's employees left it the moment they knew something reprehensible was being done, this would be a perfect world.
Umm... I don't think there should be any moral obligations for programmers, at least not more that those for painters, writers, lawyers, accountants, etc. The only obligation is to do the job you are paid for to the best of your abilities. Which is an ethical obligation, not a moral obligation.
Try to apply the above "obligations" to any other profession and see how unapplicable it is. Is a writer morally reprehensible for writing a book that "causes more harm than good", regardless of its contents? Is a lawyer morally reprehensible for defending criminals, especially who have admitted the crime to their lawyers? Are painters morally reprehensible for painting, say, obscene paintings for their customers? Are accountants morally reprehensible for not using the "state of the art" accounting techniques, but instead uses only established ones invented decades ago?
Is a writer morally reprehensible for writing a book that propagates, say, a racist ideology? Yes. Are obscene paintings morally reprehensible? Hell no. Are accountants morally reprehensible for using error-prone techniques that were obsolete 150 years ago (to make your analogy accurate)? Hell, yes. (I'm not opening the can of worms that are lawyers.)
Do software writers interact with their peers through their product to a far greater extent than painters, writers, lawyers and accountants? Hell yes. To make the analogies accurate, you'd have to ask:
Is a lawyer morally reprehensible for drafting a law that's incomprehensible to nearly everyone and requires hundreds of hours merely to understand? This is an extremely fertile ground for analogy; consider OO and OAOO law.
Are accountants morally reprehensible for setting up a company's finances in such a manner that no other accountant can understand them without investing hundreds of hours into the endeavour?
There isn't really any parallel between what programmers do, and the writing of racist books and/or pornography. (Other than writing racist and/or pornographic software, which is not the issue here). Regarding accounting--that's a whole 'nother ball of wax--accountants have professional standards boards (FASB in the UnitedStates) which decide much of what is acceptable and not. There is no such professional standards board for programmers (though it could be argued that there should be, at least for some applications).
Legislators and not lawyers write laws (though granted many of the former are also the latter; and those that aren't have lawyers at their disposal)--most of the complexity of the law comes from the complexity of the underlying subject matter (whether the law itself should be so byzantine is debate unto itself). The last question about accounting seems to imply intentional misconduct on the part of the accountant--which also has little to do with the assertions of this page.
Oh, and could you elucidate between the difference between an "ethical" and a "moral" obligation? Is it possible to be ethical but immoral? (Perhaps a peddler of racist literature who nonetheless runs an honest business) Unethical but moral? (Perhaps a modern day Robin Hood?) As both relate to fundamental concepts of right and wrong, I am unsure of a difference. (One difference aluded to in my examples is that the "ethical" person is upright in his dealings with others with whom he comes into direct contact; the "moral" person acts in a manner to benefit society at large?)
In actual usage, morality refers to the interrelationships between members of the same group, whereas ethics refers to the relationships between the group's members and non-members.
So you have professional ethics, People for the Ethical Treatment of Animals, and human morality. Professional morality would mean that you write for the benefit of your professional peers, which makes no sense for most professions.
Re: "use state of the art"
Summary of potential problems:
I have been told that ethics is the policy structure for your choices, your rules, and moral is the implementation, how you actually behave. If the paragraphs above are the correct definitions of the words, could someone please enlighten me what my two thingies should be called. -- ClaesWallin
Strategy and tactics? Worldview and intent?
Some possibilities:
Do the best you can do. Be a craftsman: don't do shoddy work out of laziness, spite, or ignorance.
As a corollary, improve yourself. Become better at what you do, so that you can do it better.
Pay it forward. When you were starting out, you learned from others. Now, it's your turn to teach.
Work for the customer, not against the competition. This is a business principle too, but it has a specific application to programmers: Never submit code that is intended to break the competitor's product or restrict the customer. Don't write lock-in; don't write DRM.