3.2 러스트 ‘안전성’의 정의, 경계, 그리고 한계
러스트의 ‘안전성’은 포괄적인 ‘무결점(bug-free)’을 의미하는 것이 아니라, 명확하게 정의된 기술적 보증 범위를 지칭합니다. 이 ‘안전성’의 정확한 의미와 그 범위를 이해하는 것은 러스트의 공학적 설계를 분석하는 데 필요합니다.
본 3.2절에서는 먼저 러스트가 보증하는 ‘안전성’의 핵심 정의를 규명하고(3.2.1), 이어서 unsafe 키워드로 대표되는 보증의 경계(3.2.2), panic이라는 실패 모델(3.2.3), 그리고 메모리 릭과 논리적 오류처럼 보증 범위에 포함되지 않는 문제들(3.2.4, 3.2.5)을 순차적으로 분석하여 그 한계를 명확히 합니다.
3.2.1 ‘안전성’의 정의: 정의되지 않은 동작(UB) 방지
러스트 담론에서 ‘안전성(safety)’은 핵심 개념으로 제시됩니다. 이 용어의 기술적 정의는 명확한 규정이 필요합니다. 러스트 언어 모델에서 ‘안전성’은 모든 종류의 버그(bug)가 없음을 의미하는 것이 아니라, ‘정의되지 않은 동작(Undefined Behavior, UB)’의 부재를 보증하는, 구체적이고 한정된 의미로 사용됩니다.
‘정의되지 않은 동작’은 C/C++과 같은 언어에서 프로그램이 언어 명세가 규정하지 않는 상태에 진입하여, 시스템 충돌, 데이터 오염, 보안 취약점 등을 유발할 수 있는 예측 불가능한 행위를 의미합니다.
러스트의 설계 목표 중 하나는 ‘Safe Rust’로 분류되는 코드 영역에서 이러한 UB가 발생하는 것을 컴파일 시점에 정적으로 방지하는 것입니다. 러스트의 컴파일러(특히 빌림 검사기)는 해제 후 사용(use-after-free), 널 포인터 역참조(null pointer dereferencing), 버퍼 오버플로(buffer overflow), 그리고 스레드 간의 데이터 경쟁(data race)과 같은 UB 유발 원인들을 차단합니다.
이 정의는 러스트의 공식 문서 ‘러스트노미콘(The Rustonomicon)’에 명시되어 있습니다. “코드가 ‘안전(Safe)’하다고 말하는 것은, 이 코드가 어떠한 정의되지 않은 동작(UB)도 일으키지 않을 것임을 약속하는 것입니다.”3
따라서 러스트의 ‘안전성 보증’은 ‘메모리 안전성’과 ‘스레드 안전성(데이터 경쟁 방지)’이라는 특정 영역에 집중됩니다. 이 기술적 정의는 ‘안전성’이라는 용어에 대한 일반적인 인식(예: 프로그램의 논리적 정확성, 런타임 오류 부재)과 범위 차이가 있으며, 이는 이후 절에서 분석할 한계(메모리 릭, 패닉 등)를 이해하는 기준점이 됩니다.
해체하고 보니 합리적이군요. - dc App
리스트에서 안전성 개념을 축소하여 재정의하였고 대중들은 러스트 쓰면 전반적인 안전성이 향상될 것이라 착각. 러스트.진영 측에서는 이러한 부작용을.방치. ㅎㅎ
@나르시 흠 구글 프로그래머들은 도움 많이 됐다 평가하던데요? - dc App
어디에 그런 평가가 있나요? 보안 향상된다는 평가는 봤습니다만. freebsd측에서는 득실 따져보고 실이 크다 판단하여 러스트 도입에 비적극적입니다. 영역 별, 목적 별로 도입 사유 및 거절 사유가 다르겠죠?
@나르시 흠 러스트 도입한 뒤 메모리 버그로 인한 취약점이 대폭 줄어들었다고 발표했는데 못들어보셨나요? - dc App
참도로 말이죠 자바로도 보안성 향상되는건 알고 계신가요? 자바 써도 되는 곳은 자바 쓰고 인증 필요한 곳은 Ada/c/c++쓰고, 인증 불필요한 곳은 러스트 도입 여부를 고려해볼 수 있겠군요 ㅎㅎ
보안성 향상되었다는 평가는 보았조. 그래서 그게 뭐요? 보안성은 자바 써도 향상되고 ada 써도 향상되고파이선 써도 향상되는데요.. 그래서 그게 뭐..
@나르시 자바로는 운영체제 작성도 안되고 임베디드도 안되고 메모리 사용량도 높고 gc 때문에 예측 불가능한 성능 이슈가 있을 수 있고 jit 성능도 들쭉날쭉 할 수 있는데요? - dc App
그래서요? 그럼에도 불구하고 자바가 안전한 언어라는 사실에는 변함이 없어요. 대화의 요지가 뭔가요? 자바 써도 되는 곳에 자바 쓰고, 즉, 자바/c/c++/러스트 등 적절한 언어를 선택하면 된다는 얘기를 제가 또 반복적으로 합니다.
@나르시 굳이 러스트 없이도 자바 파이썬으로도 메모라 안전하게 할 수 있다시길래 자바 못쓰는 영역과 쓴다 해도 성능적으로 발목이 잡힐 수 있다는 점을 말쑴드린거죠. 오히려 제가 묻고 싶군요. 굳이 자바로도 됩니다 하시는 저의는 뭔가요? - dc App
안전성은 굳이 자바로도 됩니다. 그래서 그개 뭐... 각 영영 요구사항에 따라 적절한 언어를 선택하면 돤다고 누누이 말씀드립니다. 무슨 문제라도 있는지요? ㅎㅎ
논의의 목적이 무엇인가요? 본문글은 무엇을 의미할까요?
@나르시 흠 반대로 자바로 할 수 있는 것 중에 러스트가 못하는게 있을까요? 제가 보기엔 없지 않을까 싶지만 굳이 언급하신 이유가 음 러스트 배울 지능이 안되는 자신에 대한 열등감으로 러스트가 이룬 gc 없는 메모리 안정성의 혁식을 깍아내리고자 함이 아닐까 그런 의심이 드는군요. 굳이 자바를 언급하신 의도가 따로 없다면 그 점이 의심된다 그렇게 말씀드릴 수 있을 거 같습니다. - dc App
말씀에 오해가 있으신데, gc 없는 안전한 언어로 러스트 이전에 Ada, D 언어라고 이미 존재합니다. ㅎㅎ 그리고 자바가 하는 모든 것읗 러스트로 하는 건 현실적으로 불가능합니다. 러스트가 할 수 없는 분야는 다양합니다. ㅎㅎ
"러스트 배울 지능이 안되는 자신에 대한 열등감" 이런 식의 인신공격 사양합니다. "러스트가 이룬 gc 없는 메모리 안정성의 혁신" 글쎄요. gc 없는 메모리 안전성은 오래 전부터 여러 이론들이 있고 여러 언어들에 적용되어 있습니다. ㅎㅎ
결국 잘못된 전제로부터 잘못된 결론을 도출하여 인신공격을 하시는데 러스트 담론을 해체하다는 책에서 자세한 내용을 다루고 있으니 읽어보시기 바랍니다. 감사합니다.
참도로 말이죠. 이론적으로 러스트로 할 수 있는거 어셈블리로도 다 할 수 있습니다. 사람들이 어셈블리 사용할 지능이 안 되어 어셈블리 안 쓰고 러스트 쓰는 걸 까요?
@나르시 네 자바만 되고 러스트는 안되는 예시 못대시는거보니 자바 잘 모르시는거 같고요. ada가 도피처인가 보군요. 그거 웹 서버는 만들 수 있나요? 게임은? 인공지능은? 러스트도 라이브러리가 풍부하진 않지만 ada는 더 심합니다. 굉장히 특수 목적으로 사용되는 언어인데 오직 러스트 안배워도 충분하다는 위안거리로 삼고 계신게 아닌가 그런 생각이 드는군요. - dc App
인신공격 논리적 비약을 삼가시고 제대로 말을 해봐요. 핵심을.
@나르시 어셈블리가 메모리 안전한가요? llm에 의존하시다보니 뇌 컨텍스트가 비둘기 수준이 되신거 같습니다 ㅎㅎ 뭐 살 날이 길지 않다고 들었는데 행복하시면 그만이죠 뭐 - dc App
자바만의 독보적 분야가 있습니다. 무중단 서비스, 리플렉션, 생산성 갑. 제가 항상 말합니다. 상충관계, 적합한거 선택. 러스트르는 그러한 영역에 도달하기 힘들어요. 러스트는 에러(예외) 발생시 죽이는게 목적이고 자바, Ada는 서비스 가용성이 목적입니다.
c/asm으로 메모리 안전하게 작성하는게 가능은 합니다. c/c++에 정형 검사기 사용하여 안전성 검증 후 우주선도 띄우고, 자율주행도 수행하죠. 러스트로는 불가능한 영역입니다.
@나르시 저능한데다 고집만 부리고 더 말 섞을 필요를 못느끼겠군요. 러스트 신화를 해체분석했더니 러스트의 훌륭한 점만 나오는것으로 결론 내리겠습니다. - dc App
ㅎㅎ 러스트로 만든 vmm 털렸답니다 ㅋㅋ