I've been thinking a little bit about repurposing of software. One line I've always said I won't cross - inspired by one of the original investors in Elgg, who said the same thing - is that I won't build software that will be used directly or indirectly to kill people. That rules out working on defense contracts, or anything involving weaponry.
The trouble is, software can be repurposed. You could write an algorithm that identifies objects in photographs in order to improve search results, for example, and come into work one day to discover that it could be used for drone targeting. Algorithms can be used for evil. (I would argue that drones, at anybody's hand, fit the definition of "evil".)
I mentioned this on Twitter this morning, and Julien Genestoux made a really important point:
Not "can". will. I am sure there is a ton of OSS code in a lot of the military. Some of it likely used to kill people. we just do not know about it.
— Julien Genestoux (@julien51) March 8, 2018
Open source software can be used by anyone for anything, as long as the four freedoms are adhered to:
The freedom to run the program as you wish, for any purpose (freedom 0).
The freedom to study how the program works, and change it so it does your computing as you wish (freedom 1). Access to the source code is a precondition for this.
The freedom to redistribute copies so you can help your neighbor (freedom 2).
The freedom to distribute copies of your modified versions to others (freedom 3). By doing this you can give the whole community a chance to benefit from your changes. Access to the source code is a precondition for this.
There is nothing to prevent unethical use of the software. This is a real gap: while I applaud the principles of freedom at work in open source licensing, I would be appalled if Elgg or Known or anything else I'd written were used to cause harm to others. I want no part in that.
Specific modifications to open source licenses exist to achieve certain goals. For example, if software is released under the GNU Affero Public License, running it on a server for people to use counts as redistribution, and any modifications to the code must be made public.
So what if there was a version that refused use for military / defense applications? That would allow software to continue to be used freely, but would deny the license to anyone directly working for, or contracted by, military or defense organizations. Those parties would need to negotiate a specific license, allowing the softare vendor to make decisions on a case by case basis.
The license wouldn't be universal - not everyone has the same objections I do. But for developers like me, it would provide some peace of mind.