Show HN: Rust로 작성된 현대적인 Minecraft 서버, Pumpkin
(github.com/Snowiiii)- Pumpkin은 Rust만으로 만든 Minecraft 서버로, 빠르고 효율적이며 커스터마이즈 가능한 서버 경험을 제공하면서 게임의 핵심 메커니즘을 따르는 것을 목표로 함
- 목표는 멀티스레딩 기반 성능, 최신 Java 및 Bedrock Minecraft 서버 버전 호환성, Vanilla 게임 메커니즘 준수, 알려진 보안 취약점 방지, 높은 설정 가능성, 플러그인 개발 기반 제공임
- 기능 범위는 프로토콜, 월드, 플레이어, 엔티티, 서버, 프록시 영역으로 나뉘며 Server Status/Ping, Encryption, Packet Compression, Java/Bedrock, World Loading/Saving, Lighting, Entity Spawning, Inventory, RCON, Permissions, Bungeecord, Velocity 등이 포함됨
- 현재 1.0.0 이전의 활발한 개발 단계이며, Advancements와 Villagers는 미완료로 표시되어 있고 Mobs, Animals, Non-Living Entities는 W.I.P로 표시됨
- 실행은 Quick Start 문서를 따르며, 문서와 Discord, GitHub Sponsors, CONTRIBUTING.md를 통해 사용·커뮤니티 참여·후원·기여 경로를 제공함
Pumpkin의 목적과 상태
- Pumpkin은 Rust로만 작성된 Minecraft 서버임
- 빠르고 효율적이며 커스터마이즈 가능한 경험을 제공하고, Minecraft의 핵심 게임 메커니즘을 따르는 것을 지향함
- 프로젝트는 현재 heavy development 상태임
- 1.0.0 릴리스 전에 필요한 작업은 관련 이슈에서 확인할 수 있음
설계 목표
- Performance: 멀티스레딩을 활용해 속도와 효율을 높이는 것을 목표로 함
- Compatibility: 최신 Java 및 Bedrock Minecraft 서버 버전을 지원하고 Vanilla 게임 메커니즘을 따름
- Security: 알려진 보안 익스플로잇 방지를 우선함
- Flexibility: 불필요한 기능을 비활성화할 수 있는 높은 설정 가능성을 제공함
- Extensibility: 플러그인 개발을 위한 기반을 제공함
구현된 기능 범위
-
설정
- TOML 기반 설정을 지원함
-
프로토콜
- Tracking: Protocol
- Server Status/Ping, Encryption, Packet Compression, Java/Bedrock 지원이 체크되어 있음
-
월드
- Tracking: World
- Player Tab-list, Scoreboard, World Loading, World Time, World Borders, World Saving, Lighting, Entity Spawning, Bossbar를 지원함
- Chunk Loading과 Chunk Saving은 Vanilla, Linear, Pump 형태가 체크되어 있음
- Chunk Generation, Redstone, Liquid Physics 항목이 포함됨
-
플레이어
- Tracking: Player
- Skins, Teleport, Movement, Animation, Inventory, Experience, Hunger, Off Hand, Eating이 체크되어 있음
- Combat이 별도 추적 항목으로 연결되어 있음
- Advancements는 미완료로 표시됨
엔티티·서버·프록시
-
Entities
- Non-Living 엔티티는 Minecart, Eggs 등을 포함하며 W.I.P로 표시됨
- Entity Effects, Players, Boss, Entity Saving이 체크되어 있음
- Mobs와 Animals는 W.I.P로 표시됨
- Entity AI가 별도 추적 항목으로 연결되어 있음
- Villagers는 미완료로 표시됨
-
Server
-
Proxy
- Bungeecord와 Velocity가 체크되어 있음
실행, 문서, 커뮤니티
- 실행 방법은 Quick Start 가이드를 통해 확인할 수 있음
- 문서는 pumpkinmc.org에서 제공됨
- 기여는 환영되며 CONTRIBUTING.md를 참고하도록 안내함
- 업데이트와 이벤트, 멤버 연결을 위해 Discord 서버를 제공함
- 프로젝트 후원은 GitHub Sponsors를 통해 가능함
댓글과 토론
Hacker News 의견들
-
https://dayssincelastrustmcserver.com/
- 10년 전 Minecraft 모딩을 많이 했던 입장에서, 커뮤니티가 아직도 이런 내부 농담이 생길 만큼 활발한 걸 보니 반가움
게임 규모를 생각하면 어떤 언어로든 Minecraft 서버를 만드는 건 쉬운 일이 아닌데, Rust로만 벌써 7개나 있다는 게 놀라움
- 10년 전 Minecraft 모딩을 많이 했던 입장에서, 커뮤니티가 아직도 이런 내부 농담이 생길 만큼 활발한 걸 보니 반가움
-
벤치마크상 성능 차이가 꽤 인상적이지만, 월드 생성과 저장 기능이 빠져 있는 것으로 보이고 이 둘은 비용이 큰 작업임
특히 청크 생성은 약한 VPS를 그대로 주저앉힐 수 있음. 벤치마크는 유휴 상태에서 측정했을 테니, 해당 기능들이 들어가 실제로 사용될 때 비교가 궁금함
블록 파괴/설치 지원도 보이지 않는데, 이 경우 서버에서 조명 재계산과 청크 갱신이 필요할 듯함
마지막으로 점수판, 팀, 명령 블록 파싱 같은 고급 기능도 추가할 계획인지 궁금함. Mojang은 이쪽을 위해 Brigadier를 오픈소스로 공개해 둔 상태임
저사양 하드웨어에서도 서버 운영이 쉬워질 만큼 성숙해지길 기대함- 벤치마크는 직접 봐도 꽤 인상적임
블록 설치와 파괴는 이미 지원하지만, 조명은 아직 지원하지 않아서 현재는 전부 어둡게 보임. 작업 중임
점수판, 팀 같은 기능도 넣고 싶고, 명령어용으로 Brigadier와 비슷하게 쓸 수 있는 API는 이미 있음
저사양 하드웨어에서도 플레이어들이 서버를 호스팅할 수 있게 만들고 싶고, 언젠가 Raspberry Pi 같은 데서 Pumpkin을 테스트해볼 생각임 - 청크 생성은 마지막에 구현하거나 아예 안 해도 말이 됨. 성능 좋은 Minecraft 서버를 원한다면 어차피 모든 청크를 미리 생성해야 함
청크에는 거주 시간이 저장되므로, 나중에 업데이트된 청크 생성 로직을 적용하고 싶으면 아직 방문되지 않은 청크만 다시 생성할 수도 있음
Minecraft 서버 재구현은 꽤 흥미롭고 새 구현체가 나올 때마다 보기 좋음. 기술 Minecraft용 빠른 레드스톤 컴파일을 위한 MCHPRS 같은 특정 목적 서버 구현도 있음
- 벤치마크는 직접 봐도 꽤 인상적임
-
벤치마크가 있는지 궁금함. 바닐라 서버보다 얼마나 빠른가?
Minecraft 서버는 플레이어 수가 늘수록 자원 사용량이 극단적으로 커지고, 아주 강한 서버를 돌려도 TPS가 나쁘게 나오는 경우가 많음- 마침 계속 벤치마크를 만들고 있었음. 여기서 볼 수 있음
https://snowiiii.github.io/Pumpkin/about/benchmarks.html
- 마침 계속 벤치마크를 만들고 있었음. 여기서 볼 수 있음
-
최근에 Pumpkin을 개발했음. Rust로 처음부터 완전히 작성한 효율적이고 빠른 Minecraft 서버이니 한번 봐주면 좋겠음
- 멋짐. 멀티스레딩이 어떻게 동작하는지 궁금함. 쉬운 부분만 나눈 건지, 월드 관련 실제 작업도 병렬화한 건지 알고 싶음
- “Pumpkin이 하지 않을 것: 바닐라나 다른 서버의 드롭인 대체품이 되기”라고 되어 있는데, 드롭인 대체품이 아니라면 Minecraft 서버라고 보기 어려운 것 아닌가 싶음
Uno 덱이 Hearts 덱의 드롭인 대체품은 아니지만 둘 다 카드 게임일 뿐, 둘 다 Uno 덱은 아닌 것과 비슷함
아니면 Pumpkin이 네트워크를 제외한 부분에서 바닐라와 다르게 동작해서, 바닐라로 만든 월드를 Pumpkin에서 열지 못할 수도 있다는 뜻인지 궁금함
-
예전부터 이 프로젝트를 알고 있었고 Discord에도 들어가 있었음. 지금은 마음 건강을 위해 Discord 계정을 삭제한 상태임
Hacker News에서 이 프로젝트를 꽤 좋아해 주는 것 같아 기쁨. 140 업보트면 꽤 괜찮다고 봄
기억상 Rust로 작성된 다른 서버도 하나 있었던 것 같은데 정확히는 모르겠음
마지막으로 봤을 때는 정말 초기 알파 소프트웨어였지만 개발 속도는 좋았음. 지금 상태는 잘 모르겠고, 작성자가 시험 보러 갔던 시기에 있었던 기억이 남- 많은 사람이 프로젝트를 좋아해 줘서 정말 기쁨. 아직 작업 중인 프로젝트지만 열심히 만들고 있음
지난주에 시험을 끝냈고 지금은 방학이라 커밋도 다시 평소처럼 돌아왔음 - C로 작성된 Cuberite일 수도 있음
- 많은 사람이 프로젝트를 좋아해 줘서 정말 기쁨. 아직 작업 중인 프로젝트지만 열심히 만들고 있음
-
메인 스레드를 지역별로 샤딩하는 방식인지, 예를 들면 Paper Folia처럼 하는지 궁금함. 아니면 비 블록 엔티티만 별도 스레드로 분리하는 정도인지 알고 싶음
-
Minecraft가 충분히 역공학되어서, 여러 서버와 클라이언트 구현이 그냥 호환되는 자체 프로토콜처럼 되기만 기다리는 중임
- Bedrock의 네트워크 프로토콜은 문서화되어 있음: https://github.com/Mojang/bedrock-protocol-docs
- 이미 그렇게 되어 있음. 전체 프로토콜은 역공학됐고, 코드를 자동으로 난독화 해제하는 도구도 있으며, 서버까지 지원하는 Minecraft의 완전 재구현도 이미 있음
-
한번 써보겠음. 순수 바닐라 서버 jar의 성능이 너무 나쁨. Mojang이 개선해줬으면 하는 부분임
새 청크 생성은 적어도 멀티스레드인 걸로 알고 있음
SMP 서버에 대한 기본 제어도 공식 지원해줬으면 좋겠음. 두 꼭짓점 좌표로 정의한 영역, 설치·파괴·상호작용 같은 기본 권한 정도면 충분함
간단한 설정 파일이면 되고, 요청이나 업데이트는 다른 도구로 관리할 수 있음. 운영자용 간단한 게임 내 명령줄 유틸리티도 괜찮음
항상 폐쇄형 화이트리스트만 쓰지 않아도 되게 해주는 정도를 원함. Paper/Waterfall 등에는 플러그인이 있는 건 알지만, 순수 바닐라를 유지하는 데서 오는 장점이 있음
오랫동안 서버를 계속 살려두고 있음- 아직 완성된 상태는 아니고 빠진 기능이 많다는 점만 염두에 두면 좋겠음
나열한 것들은 전부 설정 파일에서 구성 가능하게 만들고 싶어서 마음에 들 가능성이 큼
문제가 있으면 https://snowiiii.github.io/Pumpkin/troubleshooting/common_is...를 보거나 Discord에서 도움을 요청하면 됨
- 아직 완성된 상태는 아니고 빠진 기능이 많다는 점만 염두에 두면 좋겠음
-
Rust로 작성된 새 Minecraft 서버가 나온 지 0일이 됐음
https://dayssincelastrustmcserver.com/- 웃긴 사이트지만 약간 부당함. 저 중에서 “이미 있잖아”라고 할 만한 건 사실상 Valence뿐임
총 7개 중 앞의 3개는 죽었고, 최신 3개는 Pumpkin 포함 전부 2024년 프로젝트임. 2024년 프로젝트들은 모두 모듈성에 집중하는 프레임워크에 가까운 Valence와 차별점을 명시하고 있음
최신 3개는 서로 우호적인, 건강한 경쟁자로 보임released stars last_update feather 19aug 2,614 2 years ago mchprs 20jun 1,632 last month graphite 22jun 160 2 years ago valence 22sep 2,731 3 days ago hyperion 24mar 361 today pumpkin 24jul 965 today ferrumc 24sep 673 today - 이 중 상당수가 “Minecraft 서버인가? 아님. 자신만의 Minecraft 서버 재작성판을 만들 수 있는 프레임워크임”인 게 꽤 웃김
- Pumpkin은 이미 그 목록에 있음
- 이걸 보니 Rust가 정말 이 작업에 맞는 도구인지 생각하게 됨. 오히려 Elixir/Erlang이 완벽한 도구처럼 느껴졌고, 실제로 누군가 이미 만들었음
BEAM에서 이런 걸 어떻게 하는지 배우는 사람에게 좋은 참고 자료임: https://github.com/thecodeboss/minecraft - Bevy로 만든 Minecraft 서버가 있으면 멋지겠다고 생각했는데, 그것도 이미 있었음: https://github.com/valence-rs/valence
- 웃긴 사이트지만 약간 부당함. 저 중에서 “이미 있잖아”라고 할 만한 건 사실상 Valence뿐임
-
여기서 modern은 무슨 뜻인가?
- 요즘 “modern”은 “$thing을 [Rust로] 다시 썼다”를 뜻하는 느슨한 형용사처럼 쓰이는 듯함
Minecraft는 2011년에 만들어졌고, Wikipedia에 따르면 ‘classic’ 에디션의 마지막 버전은 2017년에 나왔음. 그러니 2017년 이후의 것은 전부 구식이 아닌 셈임
무언가를 다시 쓰는 것 자체는 괜찮지만, “modern”을 가치로 내세우는 건 꽤 느슨하고, 객관적으로 더 나은지도 자주 논쟁적임 - 처음부터 작성됐고, 바닐라 Minecraft 서버 코드와 달리 깔끔한 기반을 갖고 있다는 뜻임
멀티스레딩이나 Rust 같은 현대적 기능도 쓰고 싶음. Rust는 오래된 언어들의 실수를 고치기 위해 설계된 현대적인 언어라고 봄 - 소프트웨어에서 modern은 거의 항상 최근 몇 년 안에 작성됐다는 뜻일 뿐임. 소프트웨어를 설명하는 형용사로는 별로 쓸모가 없음
예를 들어 SQLite는 modern이라고 불리지 않을 가능성이 크지만, 모두가 좋아하니 상관없음
- 요즘 “modern”은 “$thing을 [Rust로] 다시 썼다”를 뜻하는 느슨한 형용사처럼 쓰이는 듯함