개요

Aseprite는 독자 EULA(이전에는 GPLv2) 라이선스를 사용합니다.

OSI 기준으로 이런 소프트웨어는 오픈소스는 아니고, source-available입니다.

라이선스를 한 줄 요약하면, 본인이 직접 빌드해서 개인 사용하는 것은 허용하지만 컴파일된 바이너리는 재배포 금지한다는 것입니다. GPL로는 수익화가 어려워 이런 결정을 한 듯합니다. (실제로 커뮤니티에 과거 코드의 빌드 공유 글들이 다수 있었다고 합니다)

Steam/공식 유료판과 직접 빌드본은 기능적으로 동일하다고 합니다. (자동 업데이트 같은 부가 기능은 없다고 함)

호기심에 빌드를 시도해보긴 하지만, 솔직히 20달러에 완전 buyout 모델이기 때문에 (어도비랑 다르게 10년간 정책을 유지해왔으니 신뢰할 만하지 않을까요?) 그냥 유료 구매하는 것이 장기적으로 훨씬 이득이지 않을까 싶습니다.

사전 준비

제 환경은 아래와 같습니다.

항목
OSmacOS 26.3.1 (Darwin 25.3.0)
Archarm64 (Apple Silicon)
CMake3.24.2 (Homebrew)
ClangApple clang 17.0.0
Ninja1.13.2 (Homebrew)

빌드 전에 사전 조사한 몇 가지 포인트입니다:

  • 런타임 의존성은 당연하지만 0입니다.
    • Skia, freetype, lua 등 모두 정적 링크로 바이너리 안에 박혀있습니다.
    • Aseprite는 3가지 Sealed Binary 전략을 씁니다.
      • Submodule + Vendoring (코드 쌩으로 박기) + Prebuilt Binary (Skia)
      • Skia 빌드는 디스크 공간도 많이 먹고 빌드도 엄청 오래 걸리는 걸로 알고 있습니다. 그래서 Skia만 별도 트랙으로 분리된 것입니다.
        • 보니까 Skia도 구글 Skia 레포의 Fork(aseprite/skia)입니다. 담당자가 가끔 한 번씩 빌드해서 Releases에 올려주는 것 같습니다.
        • 아니 이제 보니까 모든 서브모듈이 자체 fork입니다. 철저하게 supply chain을 격리해놓았습니다.
  • 빌드 유의사항
    • CMake 버전이 좀 구버전인데, 문제 생기면 그때 대응하는 게 좋을 듯합니다.
    • 반면 Xcode는 또 최신 버전이라 이슈가 있을 수도 있다고 생각했지만, 그것도 만나면 대응합니다.
      • INSTALL.md의 권장 사항은 macOS 15.4 SDK + Xcode 16.3입니다.
    • 이 글은 arm64 빌드 기준으로 정리합니다. (INSTALL.md에 arm64 섹션이 별도로 있습니다)

빌드

소스 확보

  • git clone --recursive https://github.com/aseprite/aseprite.git
    • submodule 때문에 recursive로 해야함.
  • 저도 실제로는 유료 구매했고, 지금 건 실험 목적이 강해서 main에서 진행했습니다. (stable 태그 존재함)

Skia Prebuilt 확보

Skia-m124 (m124-08a5439a6b)

  • aseprite/skia의 최신 릴리즈 m124 (2024-06-11)를 사용합니다. (INSTALL.md에서 권장하는 버전)
    • arm64 빌드할 것이기 때문에, Skia-macOS-Release-arm64.zip을 받습니다.
    • libskia.a (19MB) 얻으면 됩니다.

CMake configure (arm64)

INSTALL.md의 arm64 섹션을 따라 아래와 같이 빌드합니다.

cmake \
  -DCMAKE_BUILD_TYPE=RelWithDebInfo \
  -DCMAKE_OSX_ARCHITECTURES=arm64 \
  -DCMAKE_OSX_DEPLOYMENT_TARGET=11.0 \
  -DCMAKE_OSX_SYSROOT=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk \
  -DLAF_BACKEND=skia \
  -DSKIA_DIR=$SKIA \
  -DSKIA_LIBRARY_DIR=$SKIA/out/Release-arm64 \
  -DSKIA_LIBRARY=$SKIA/out/Release-arm64/libskia.a \
  -G Ninja ..

PNG_ARM_NEON에 대하여

사실 위 커맨드는 INSTALL.md arm64 섹션에 있는 -DPNG_ARM_NEON:STRING=on을 깜빡하고 빠뜨린 것입니다. 그런데 빌드 후 CMakeCache.txt를 확인해보니 PNG_ARM_NEON=on으로 들어가 있었습니다.

이유: ARMv8(=arm64) ISA는 NEON을 mandatory로 강제하므로 모든 arm64 CPU에 NEON이 있다는 게 보장되고, libpng는 이 점을 활용해 arm64에서는 기본값을 자동으로 on 으로 둡니다.

빌드 스크립트 품질이 진짜 좋은 것 같습니다. 솔직히 한 번에 빌드 될 줄 몰랐습니다. (본인은 대학 과제 때문에 cmake ptsd 있음)

Ninja 빌드

ninja aseprite

끝. 포그라운드에서 유니티 작업을 하고 있었는데도 메모리 압박 없이 4분만에 완료되었습니다.

최종 산출물

항목위치크기
실행 파일aseprite/build/bin/Aseprite.app/34MB (binary)
빌드 산출물 전체aseprite/build/2.0GB
소스+빌드aseprite/2.7GB
Skia prebuiltdeps/125MB
합계-약 2.85GB