현재 전 세계에서 사용되는 OS는 크게 두가지로 나뉩니다. Unix와 그 호환 계열(BSD, Android, macOS, Linux), 그리고 Windows계열 이렇게 입니다.


일반인들은 컴퓨터OS하면 Windows만 떠올리기 때문에 당연히 Windows가 표준일 것이라고 생각하지만 현실을 보면 Unix계열의 점유율이 엄청납니다. 현재 인터넷의 근간을 이루는 서버들은 대부분 Linux를 기반으로 하고 있고 상당부분은 BSD나 Sparc 계열의 Unix입니다. Windows서버의 점유율은 그렇게 높지 않지요.


그리고 클라이언트쪽도 사정이 만만치 않아서 Android나 iOS를 기반으로 한 모바일 계열이 거의 점령한 라서 Unix계열은 거의 전세계IT시장에 상당부분을 가지고 있다고 봐야합니다.

그렇다고 Unix만 신경 쓸 수는 없는 것이 Windows가 PC 데스크탑에서 대부분이고 최종 사용자들이 이것을 쓰니 이쪽도 신경을 써야합니다. 심지어 게임기조차도 Xbox는 Windows기반이지만 PS4는 BSD를 기반으로 합니다.


이러다보니 Windows를 쓰는 사람도 Unix계열을 신경써야하고 Unix계열을 쓰는 사람도 Windows를 신경써야합니다.


하지만 이 둘은 시작이 달랐던 관계로 난감한 일이 자주 벌어지곤 합니다.


가끔 txt파일을 Windows의 메모장으로 열면 중간중간�로 도배되는 경우가 있었습니다. 원인은 텍스트파일에서 문장의 끝을 의미하는 코드가 Windows와 Unix가 달라서 벌어진 일입니다.


그 이유는 줄 바꿈코드가 당시에는 딱히 표준이 정해지지 않아서 CR, LF 라는 두가지가 혼용된 상태였고 리눅스나 Unix계열은 LF(\n)를 매킨토시(macOS9이하를 말함)는 CR(\r)을 Windows는 이 둘을 합친 CRLF(\r\n)을 사용했기 때문입니다.


이 와중에 메모장은 엄청 간단하게 만들어진 프로그램이었기 때문에 기존 DOS시절부터 내려오던 파일방식만을 지원했고 CRLF코드가 아니면 줄바꿈코드가 아닌 다른 코드로 인식했기 때문에 알 수 없다는 의미의 �로 처리되거나 줄바꿈이 무시되어 버린 것입니다.


이 문제는 Windows10 RS4 (1803)에서 해결이 되었고 지금은 Unix방식의 텍스트도 메모장에서 잘 읽어들이고 있습니다.


참고는 https://blogs.msdn.microsoft.com/commandline/2018/05/08/extended-eol-in-notepad/

이게 뉴스로 다뤄질 정도로 정말 오래된 문제라는 것을 아실 필요가 있습니다.


그래서 텍스트 프로그램을 짤 때 Unix방식인지 Windows방식인지 확인 하는 절차를 밟거나 LF든 CR이든 나오면 그냥 줄바꿈을 한다던가 하는 각종 코드들이 만들어지게 되었고 저장할 때 CRLF를 LF로 갈아버린다거나 하는 기능들이 추가되었습니다.


이 문제는 여전해서 Python같은 인터프린터 언어에서는 CRLF와 LF를 둘 다 읽어들여서 처리하는 코드가 들어있고 각종 개발 도구에서는 LF만을 허용하는 등 해당 문제에 대해 대처하고 있습니다. (사실 대다수 개발 도구는 Unix계열쪽을 선호합니다. \n만 쓰기 때문에 편하거든요.)




이외에도 파일 접근시 쓰는 \과 /의 문제도 있습니다.


Windows계열은 C:\Program files\blah blah라고 처리하지만

Unix계열은 /home/moordev/blah blah 라고 처라합니다.


 폴더 구분 기호가 다른 것입니다. 그런데 파일 처리하는 프로그램에서는 절대경로로 처리하려면 \혹은 /을 적어줘야하는 문제가 발생합니다. 그런데 그렇게 만들면 어느 한쪽OS에서만 동작을 하는 문제가 생기게 됩니다. 그래서 귀찮게도 OS구분을 하는 코드가 또 들어가야 합니다. \를 쓸 것이냐 /를 쓸 것이냐룰 두고 함수를 따로 만들어 넣는 것입니다. (그래서 개발자들은 같은 경로에 파일이 있는 것을 선호하는 것일지도 모릅니다.)


오픈소스 프로그램은 그래도 신경을 써서 만들기 때문에 해당 함수를 넣어서라도 OS처리를 하려고 하는 경향이 있습니다. 개발자 입장에서는 다중OS를 위해 귀찮지만 넣는 셈입니다.


아마도 이 문제는 너무 오랫동안 내려온 문제라서 해결이 되는 않을 것 같습니다. 역으로 너무 오랫동안 내려왔기에 사람들이 미처 신경을 못 쓸 지경이 되었습니다. 이 문제가 해결되려면 OS가 어느 한쪽으로 통일 되었을 때일텐데 그 날은 너무 멀게 느껴지는군요.

,