What is TTY?

TTY(Teletypewriter)에 대해 알아봅니다.

List

  1. 정의
  2. 역사
  3. 정리

정의

유닉스·리눅스에서 TTY(Teletypewriter) 는 운영체제가 사용자와 프로세스 간 문자 기반 입·출력을 중개하기 위해 추상화한 “터미널 장치”를 통칭한다. 커널은 키보드·디스플레이가 직결된 물리 콘솔(/dev/tty1 등)뿐 아니라, 원격 접속에서 생성되는 가상·의사 터미널(/dev/pts/N)까지 모두 TTY 장치 파일로 표현하고, 각 세션마다 컨트롤링 터미널을 지정해 입력 라인 편집·시그널 전달(예: Ctrl-C → SIGINT)·에코 등의 표준 기능을 제공한다. 즉, TTY는 과거 전신 타자기의 이름을 이어받아 오늘날에도 셸·프로그램이 “어느 터미널로부터 명령을 받고 어디로 출력할지”를 식별하고 제어하도록 해 주는 핵심 인터페이스다.

역사

TTY는 앞선 정의에서 말한 것과 같이 전산 타자기(Teletypewriter)의 이름을 물려받았다.

Teletypewriter (출처) 전산타자기(Teletypewriter) - Nightflyer from de.wikipeda.org

1. 전산타자기(Teletypewriter)에서 온 약자

1950 ~ 60년대 미니컴퓨터와 time-sharing 시스템의 주 입력·출력 장치는 종이롤에 글자를 찍어주는 전신 타자기(teleprinter, teletype)였다. 그래서 컴퓨터 쪽 문서와 하드웨어 회로도에서 해당 라인을 한 글자로 “tty”라 표기했고, 오늘날에도 Unix 계열에서는 텍스트 터미널을 통칭하는 기술 용어로 남아 있다.

tty
(출처) tty - https://waynerv.com/posts/how-tty-system-works

2. 초기 UNIX는 실제 ‘타자기’와 붙어 있었다

1969 ~ 71년 벨연구소가 PDP-7/PDP-11 장비 위에 첫 UNIX를 올릴 때, 연구실에 있던 인터랙티브 콘솔이 Teletype Model 33 ASR 한 대뿐이었다. 즉, 사용자가 키를 치면 모터가 돌아가 활자를 찍고, 그 소리가 그대로 시스템 콘솔이었던 셈이다. 오늘날 레트로 커뮤니티가 PDP-11 + TTY33 조합으로 부팅 시연을 하는 모습은 당시 환경을 그대로 보여 준다.

(참고) PDP-11 + TTY3 재현 영상

Teletype Model 33 ASR (출처) Teletype Model 33 ASR - [Rama](https://commons.wikimedia.org/wiki/User:Rama "User:Rama") & Musée Bolo - Own work

PDP-11 (출처) PDP 11 - [Stefan_Kögl](https://commons.wikimedia.org/wiki/User:Stefan_K%C3%B6gl "User:Stefan Kögl") - Own work

3. 커널 소스와 장치 파일 이름에 ‘typewriter’가 박제

1974년 5판 UNIX Programmer’s Manual 을 보면, 직렬 드라이버 설명이 “The discussion of typewriter I/O given in tty(IV) applies…”라고 시작하며 모든 라인을 /dev/tty? 로 명명한다. 또 C 라이브러리 함수 ttyn( ) 설명은 “return name of current typewriter”라 쓴다. 즉, 커널·라이브러리·장치 파일이 모두 ‘타자기’를 기본 단위로 설계되었다.

1974년 5판 UNIX Programmer’s Manual
(출처) 1974년 5판 UNIX Programmer’s Manual - https://archive.org/details/unix-v5/mode/2up

4. 사용자 환경도 ‘tty’를 전제로 설계

1974년 발표 논문 / 강의 슬라이드에서 UNIX의 특징을 정리할 때 “Shell-based, tty user interface”가 핵심 항목으로 꼽힌다. 표준 입력이 TTY라는 가정 아래 line-editing, 제어문자(Ctrl-C 등) 처리, session·job 제어가 정의됐고, 이후 비디오 VDU·GUI 시대에도 이 계층이 그대로 유지되었다.
(참고) https://people.eecs.berkeley.edu/~kubitron/cs262/lectures/lec01-UNIX.pdf

5. 흔적: ENOTTY(“Not a typewriter”) 오류

초판 UNIX에서는 stty/gtty 시스템 콜이 TTY 장치만 다룰 수 있었기에, 다른 파일에 쓰면 커널이 “Not a typewriter”라는 errno(ENOTTY)를 리턴했다. 오늘날엔 “Inappropriate ioctl for device”로 바뀌었지만, 매크로 이름과 의미는 그대로 남아 과거 장치 모델의 흔적을 엿볼 수 있다.

ENOTTY
(출처) ENOTTY Error - Linux Kernel - . inFoil Hat Linux

6. 리눅스가 그대로 물려받은 이유

1991년 시작된 Linux는 POSIX/UNIX 호환을 목표로 했기에, TTY 하위시스템·장치 노드(/dev/tty, /dev/ttyS0, /dev/pts/0 등), termios ioctl 인터페이스를 모두 재구현했다. 현대 데스크톱에서 터미널 에뮬레이터를 띄우면 커널이 가상 pseudo-tty(PTY) slave를 만들어 /dev/pts/N 로 연결하는 방식도, 1970년대 line-discipline(회선 규칙) 설계의 직계 후손이다.

정리

TTY라는 단어는 단순한 관습 표기가 아니라 하드웨어(전신 타자기) → 커널 장치 모델 → 시스템 호출·에러코드 → 셸·유틸리티로 이어지는 Layer 구조 속에 녹아들어 오늘까지 계승되었다. 그래서 리눅스에서도 tty, stty, who, /dev/tty 같은 이름을 그대로 볼 수 있는 것이다.