리차드 스톨먼이 작성하고 자유 소프트웨어 재단(FSF)이 발행한 자유 소프트웨어의 정의는 자유 소프트웨어를 최종 사용자가 소프트웨어를 사용하고, 연구하고, 공유하고, 수정할 자유를 보장하는 소프트웨어로 정의한다. 용어 "자유(Free)"는 "표현의 자유(Free Speech)"에 해당하는 의미로 사용되지 "무료(Free of Charge)"의 의미는 아니다.[1] 이 정의에 대해 알려진 최초의 발행은 지금은 존재하지 않는 GNU의 FSF 회보 1986년 2월 판[2]에 있었다. 문서의 공식적인 출처는 GNU 프로젝트 웹사이트의 철학 섹션에 있다. 2008년 4월 현재 이 정의는 39개 언어로 발행되었다.[3] FSF는 이 정의를 만족하는 라이선스의 목록을 발행한다.
FSF가 1986년 2월 발행한 정의는 다음 두 가지 중점을 갖는다.[2]
우리 이름의 단어 "자유(Free)"는 가격을 의미하지 않으며, 이는 자유를 나타낸다. 첫째, 프로그램을 복제하고, 이를 자기 자신은 물론 주변 사람들이 사용할 수 있도록 재배포할 자유. 둘째, 프로그램이 우리를 조정하는 것이 아니라 우리가 프로그램을 제어할 수 있도록 프로그램을 수정할 자유. 그리고 이를 위해 소스 코드는 반드시 우리에게 공개되어야 한다.
1996년, gnu.org 웹사이트가 공개되었을 때, "자유 소프트웨어"는 소프트웨어를 연구할 자유에 대한 명시적 언급(이는 두 가지 중점의 정의에서 프로그램을 수정할 자유의 일부로 이해될 수 있었다)을 추가해 "세 가지 수준의 자유"를 의미하는 것으로 정의되었다.[4][5] 스톨먼은 이후 우리는 모든 자유가 필요하다 말하며 수준에 대해 생각하는 것이 오해를 불러올 수 있고 "수준"이라는 단어를 사용하지 않았다.
마지막으로 사용자가 프로그램을 수행할 수 있어야 한다고 명시적으로 언급하는 또 다른 자유가 추가되었다. 기존의 자유가 이미 1부터 3까지 숫자가 메겨져 있었지만, 새로 추가된 자유는 가장 앞에 와야 했기 때문에 "자유 0"으로 추가되었다.[6]
현재의 정의는 소프트웨어를 받은 사람이 다음 네 가지 자유를 가졌는지 여부에 따라 자유 소프트웨어를 정의한다. [7]
- 프로그램을 어떠한 목적을 위해서도 실행할 수 있는 자유 (자유 0).
- 프로그램의 작동 원리를 연구하고 이를 자신의 필요에 맞게 변경시킬 수 있는 자유 (자유 1). 이러한 자유를 위해서는 소스 코드에 대한 접근이 선행되어야 합니다.
- 이웃을 돕기 위해서 프로그램을 복제하고 배포할 수 있는 자유 (자유 2).
- 프로그램을 향상시키고 이를 공동체 전체의 이익을 위해서 다시 환원시킬 수 있는 자유 (자유 3). 이러한 자유를 위해서는 소스 코드에 대한 접근이 선행되어야 합니다.
자유 1과 3은 소스 코드 없이 소프트웨어를 연구하거나 수정하는 것이 매우 비현실적이기 때문에 소스 코드가 공개될 것을 요구한다.
1997년 7월 브루스 페렌스(Bruce Perens)는 데비안 자유 소프트웨어 가이드라인을 발행했다.[8] 이는 또한 "오픈 소스의 정의"라는 이름으로 오픈 소스 이니셔티브(OSI)가 사용했다. 이 때 변경된 유일한 부분은 "자유 소프트웨어"라는 용어 대신 이에 대한 OSI의 다른 용어 "오픈 소스 소프트웨어"가 사용되었다는 것 뿐이다.
자유 소프트웨어 운동과 오픈 소스 운동 간의 근본적인 철학적 차이에도 불구하고 자유 소프트웨어 재단의 자유 소프트웨어에 대한 공식 정의와 오픈 소스 이니셔티브의 오픈 소스 소프트웨어에 대한 정의는 몇 사지 사소한 예외는 있지만, 기본적으로 같은 소프트웨어 라이선스들을 언급한다. 철학적 차이를 강조하면서 자유 소프트웨어 재단은 다음과 같은 의견을 개진했다.
어떤 사람들은 자유 소프트웨어와 거의 같은 부류를 나타내고자 용어 “오픈 소스” 소프트웨어를 사용한다. 오픈 소스 소프트웨어는 자유 소프트웨어와 정확히 같은 종류의 소프트웨어는 아니다. 오픈 소스 소프트웨어는 우리가 너무 제한적이라고 여기는 라이선스를 받아들이기도 하며, 그들이 인정하지 않는 자유 소프트웨어 라이선스가 존재하기도 한다. 하지만 부류의 범위에 대한 차이는 작다. 거의 모든 자유 소프트웨어는 오픈 소스이고, 거의 모든 오픈 소스 소프트웨어는 자유이다.
— 자유 소프트웨어 재단, https://www.gnu.org/philosophy/categories.html
I [Matt Mullenweg] originally thought Stallman started counting with zero instead of one because he’s a geek. He is, but that wasn’t the reason. Freedoms one, two, and three came first, but later he wanted to add something to supersede all of them. So: freedom zero. The geekness is a happy accident.