Mojo

핵심 요약

Mojo는 “Python처럼 쓰고, C++처럼 실행”하는 것을 목표로 하는 고성능 정적 타입 언어다. 현대 AI 시스템을 위한 언어로 설계되었고, CPU부터 GPU까지 다양한 하드웨어에서 빠른 코드를 작성하되 특정 벤더에 종속되지 않는 것을 지향한다.

2026년 5월 기준 안정 버전은 1.0.0b1이다. 아직 베타 단계지만, Python 상호운용, GPU 커널 작성, 컴파일 타임 메타프로그래밍, 오픈소스 표준 라이브러리를 중심으로 언어 방향이 뚜렷해지고 있다.

Mojo의 핵심 포지션은 다음과 같다.

  • Python 생태계와 연결된다.
  • 성능 병목만 선택적으로 Mojo로 옮길 수 있다.
  • CPU와 GPU 코드를 같은 언어로 작성하려 한다.
  • 컴파일 타임 메타프로그래밍으로 비용 없는 추상화를 제공하려 한다.
  • AI/ML 시스템의 커널, 런타임, 하드웨어 최적화를 겨냥한다.

왜 Mojo인가

AI 시스템은 Python으로 빠르게 작성되지만, 실제 성능 병목은 C++, CUDA, Triton, 벤더별 커널, 런타임 코드로 흩어진다. 이 구조는 생산성과 성능을 분리한다.

Mojo가 해결하려는 문제는 이 간극이다.

  • 연구자와 개발자는 Python에 가까운 문법으로 시작한다.
  • 병목이 생기면 같은 코드베이스 안에서 정적 타입과 저수준 최적화를 추가한다.
  • GPU 커널도 별도 언어나 벤더 라이브러리로 완전히 분리하지 않는다.
  • 컴파일 타임 기능으로 하드웨어별 최적화를 코드 안에 표현한다.

Mojo는 Python의 직관성, Rust의 메모리 안전성, Zig의 컴파일 타임 메타프로그래밍에서 영향을 받았다고 설명된다.

Python 상호운용

Mojo의 가장 중요한 전략은 Python을 대체하기보다 확장하는 것이다.

기존 Python 코드를 전부 다시 쓸 필요 없이, 성능이 중요한 함수나 커널만 Mojo로 옮기는 경로를 제공한다.

지원 방향은 두 가지다.

  • Mojo 코드를 Python에서 import한다.
  • Mojo 코드 안에서 Python 라이브러리를 import한다.

이 구조는 점진적 마이그레이션에 적합하다. 예를 들어 NumPy 배열을 Python에서 넘기고, Mojo 함수가 내부 포인터와 SIMD를 사용해 병목 연산을 처리하는 방식이 가능하다.

장점은 명확하다.

  • 기존 Python 생태계를 버리지 않는다.
  • 성능 병목만 부분적으로 최적화한다.
  • 배포 패키지에 Python과 Mojo 코드를 함께 묶을 수 있다.
  • AI/데이터 과학 코드에서 점진적 성능 개선 경로를 만든다.

GPU 프로그래밍

Mojo는 CPU 코드와 GPU 커널을 같은 언어로 작성하는 방향을 제시한다. 목표는 CUDA 같은 벤더별 언어나 별도 컴파일 체인에 과도하게 의존하지 않고, 고성능 GPU 코드를 작성하는 것이다.

예시로 제시되는 vector_add 커널은 TileTensor를 받아 global_idx.x 기준으로 각 원소를 더한다.

개념적으로는 다음과 같다.

def vector_add(a, b, result):
    var i = global_idx.x
    if i < layout.size():
        result[i] = a[i] + b[i]

핵심은 GPU 커널이 별도 세계가 아니라 Mojo 언어의 일부로 표현된다는 점이다. 이는 Triton이나 CUDA 커널 작성 경험과 비교해 볼 만하다.

컴파일 타임 메타프로그래밍

Mojo는 런타임 코드와 같은 언어로 컴파일 타임 메타프로그래밍을 수행하려 한다.

목표는 다음과 같다.

  • 하드웨어별 조건부 컴파일.
  • 컴파일 타임 평가로 런타임 분기 제거.
  • 타입과 구조체에 대한 리플렉션.
  • 비용 없는 추상화.
  • 메모리 안전성 검증.

예를 들어 구조체의 모든 필드가 Equatable을 만족하는지 컴파일 타임에 검사하고, 필드별 equality를 자동 생성하는 방식이 가능하다.

이 접근은 C++ 템플릿처럼 강력하지만 난해한 방식보다, 같은 언어 안에서 더 직관적으로 표현하는 것을 목표로 한다.

로드맵

Mojo는 아직 젊은 언어이며 단계적 로드맵을 갖고 있다.

Phase 0

언어 기반 구축 단계다.

  • 파서.
  • 메모리 타입.
  • 함수.
  • 구조체.
  • 초기화자.
  • 인자 규약.
  • 기본 언어 기능.

Phase 1

현재 진행 중인 단계다.

목표는 CPU, GPU, ASIC에서 고성능 커널을 작성할 수 있는 표현력 있는 언어가 되고, Python을 매끄럽게 확장하는 것이다.

Phase 2

시스템 애플리케이션 프로그래밍 단계다.

보장된 메모리 안전성 모델과 시스템 프로그래밍 개발자가 기대하는 추상화 기능을 확대하는 것이 목표다.

Phase 3

동적 객체 지향 프로그래밍 단계다.

Python과의 호환성을 높이기 위해 클래스, 상속, 타입 없는 변수 같은 동적 기능을 더 많이 지원하는 방향이다.

오픈소스 전략

Mojo 표준 라이브러리는 GitHub에서 완전 오픈소스로 공개되어 있다. 반면 Mojo 컴파일러는 아직 완전 오픈소스가 아니며, 2026년 오픈소스화를 계획하고 있다.

Mojo 팀의 설명은 언어가 아직 젊기 때문에 초기에는 공통 비전을 가진 작은 엔지니어링 팀이 빠르게 움직이는 방식이 유리하다는 것이다. 장기적으로는 전체 오픈소스화를 지향한다.

학습 자료

Mojo는 다음 학습 경로를 제공한다.

  • Install guide.
  • Quickstart.
  • Beginner tutorial.
  • Game of Life 튜토리얼.
  • GPU puzzles.
  • Intro to Mojo.
  • Developer forum.
  • Roadmap.

문서를 Markdown으로 보려면 URL에 .md를 붙일 수 있고, 전체 문서 인덱스는 llms.txt에서 확인할 수 있다.

시사점

Mojo의 경쟁 대상은 단순히 Python이 아니다. 실제 경쟁 축은 Python + C++ + CUDA + Triton + 빌드 시스템으로 분산된 AI 시스템 개발 스택이다.

Mojo가 성공하려면 다음을 동시에 만족해야 한다.

  • Python 개발자가 점진적으로 도입할 만큼 쉬워야 한다.
  • C++/CUDA 개발자가 받아들일 만큼 충분히 빠르고 제어 가능해야 한다.
  • GPU/ASIC 최적화가 실제 프로덕션에서 의미 있어야 한다.
  • 패키징, 디버깅, IDE, 문서, 커뮤니티가 성장해야 한다.
  • 컴파일러 오픈소스화와 생태계 신뢰를 확보해야 한다.

Mojo 1.0 베타는 언어가 “아이디어” 단계를 지나 실제 개발자가 시험할 수 있는 단계로 들어섰다는 신호다. 다만 아직은 Python 대체재라기보다, AI/ML 성능 병목을 겨냥한 고성능 확장 언어로 보는 것이 현실적이다.

관련 노트