Imperfection is not the same as oppression
by Richard Stallman
When a free program lacks capabilities that users want, that is
unfortunate; we urge people to add what is missing. Some would go
further and claim that a program is not even free software if it lacks
certain functionality — that it denies freedom 0 (the freedom to
run the program as you wish) to users or uses that it does not
support. This argument is misguided because it is based on
identifying capacity with freedom, and imperfection with oppression.
Each program inevitably has certain functionalities and lacks others
that might be desirable. There are some jobs it can do, and others it
can't do without further work. This is the nature of software.
The absence of key functionality can mean certain users find the
program totally unusable. For instance, if you only understand
graphical interfaces, a command line program may be impossible for you
to use. If you can't see the screen, a program without a screen
reader may be impossible for you to use. If you speak only Greek, a
program with menus and messages in English may be impossible for you
to use. If your programs are written in Ada, a C compiler is
impossible for you to use. To overcome these barriers yourself
is unreasonable to demand of you. Free software really ought to
provide the functionality you need.
Free software really ought to provide it, but the lack of that feature
does not make the program nonfree, because it is an imperfection,
Making a program nonfree is an injustice committed by the developer
that denies freedom to whoever uses it. The developer deserves
condemnation for this. It is crucial to condemn that developer,
because nobody else can undo the injustice as long as the developer
continues to do it. We can, and do, try to rescue the victims by
developing a free replacement, but we can't make the nonfree program
Developing a free program without adding a certain important
feature is not doing wrong to anyone. Rather, it's doing some good
but not all the good that people need. Nobody in particular deserves
condemnation for not developing the missing feature, since any
capable person could do it. It would be ungrateful, as well as
self-defeating, to single out the free program's authors for blame
for not having done some additional work.
What we can do is state that completing the job calls for doing
some additional work. That is constructive because it helps us
convince someone to do that work.
If you think a certain extension in a free program is important,
please push for it in the way that respects our contributors. Don't
criticize the people who contributed the useful code we have. Rather,
look for a way to complete the job. You can urge the program's
developers to turn their attention to the missing feature when they
have time for more work. You can offer to help them. You can recruit
people or raise funds to support the work.