The name of “Embark Studios” was unfamiliar for me at first. But by some searches on Google, I found they are “old friends”. So I write this blog and want to make a contribution to them.

The team of Embark Studios came from EA and DICE. They made “Battlefield” which I spent lots of weekends at high school. I can’t forget the feelings of reversing the situation in “Battlefield”. Usually, in the beginning, we stayed at the last control point. Enemy’s helicopter was hovering in the air. Lots of vehicles rushed in. With the cooperation, we went through the defense hardly. Then got another one control point. Then two, then three. Oh, that pressure and concentration consumed so many hormones. I miss those guys who fought together. And the investor of Embark is familiar too. “NEXON“ made “Kart rider” which I played a lot too. My brain has been full of its iconic background music and brake sound effects right now. I miss the time when we hang out to internet cafes.

Put away thoughts. Because of my career habits, I search for The Embark Studios on Github. There are many Rust projects in their account. With reading their introduction, I know they choose rust as the primary language at the beginning. I did the same on my side projects. Holy, they are amazing. I can not wait for joining them if I qualify.

I know Embark Studios is world-class. There is a high probability that I am not qualified. But there is always something I can do and something worth learning. I don’t work in the game industry. So maybe it’s easy to make a contribution to their opensource community for learning the basics in the video game industry. And then I found I used their opensource project, “wg-ui”. My best thanks to Embark Studios. I should have learned the author of the project which I used next time. Let’s have a look at the Embark Studios’ projects. And find out how I can make a contribution to them.

The rust-ecosystem list projects written by Rust.

Name Description
🌋 ash-molten Statically linked MoltenVK for Vulkan on Mac using Ash
👷 buildkite-jobify Kubekite, but in Rust, using configuration from your repos
📜 cargo-about Cargo plugin to generate list of all licenses for a crate
cargo-deny Cargo plugin to help you manage large dependency graphs
🎁 cargo-fetcher cargo fetch alternative for use in CI or other “clean” environments
📦 krates Creates graphs of crates from cargo metadata
🎳 physx Use NVIDIA PhysX in Rust
🐏 rpmalloc-rs Cross-platform Rust global memory allocator using rpmalloc
🆔 spdx Helper crate for SPDX expressions
🔆 superluminal-perf Superluminal Performance profiler integration
📂 tame-gcs Google Cloud Storage functions that follows the sans-io approach
🔐 tame-oauth Small OAuth crate that follows the sans-io approach
🎨 texture-synthesis Example-based texture synthesis generator and CLI example

Some of the words are new to me. By doing research, I paraphrase them below.

Vulkan is a low-level graphics API. Its function is similar to OpenGL but performs better. Use the same API on different platforms and os. More small overhead on CPU and GPU driver. Better support multi-cores. Pre-compiled interface.

MoltenVK is a layer to implement the Vulkan interface for working on Apple’s Metal. Metal is a graphics API on Apple’s devices, macOS, iOS, tvOS. MoltenVK trans SPIR-V(Vulkan) to MSL(Metal).

Ash is a rust wrapper (or lib?) of Vulkan. ash-molten is used to static link to MoltenVK.

Buildkite is a CI SaaS, similar to Drone.io. But can not be on-premise.

kubekite could fetch Buildkite job and run it as a k8s job.

buildkite-jobify could be considered as a Rust version of kubekite.

cargo-about is used to manage project licenses and dependencies’ licenses. One of its dependencies, rpmalloc-sys, looks like need gcc >=4.9.

cargo-deny could help us check dependencies in several ways.

cargo-fetch could use third party storage to cache crate.io.

krates could graph the relationship of all dependencies by Cargo.toml It looks like need to update semver’s version. There are two related PR didn’t execute. I don’t know why. Maybe there are other reasons.

NVIDIA PhysX is a realtime physics engine middleware. physx-rs is the rust wrapper of NVIDIA PhysX SDK.

rpmalloc-rs is a cross-platform Rust global memory allocator.

SPDX response to licenses and copyrights of software.

superluminal is a profiling tool.

sans I/O is a kind of network protocol to support both synchronous and asynchronous.

tame-gcs, tame-oauth are both a sans I/O approach in their own field.

texture-synthesis is to generate pictures for texture map.

wg-ui is the most familiar one. It’s used to managed WatchGuard config easily in the web page.

Then we can simply classify them.

Some are about graphs and physic.

  • ash-molten
  • physx
  • texture-synthesis

Rust base tools

  • cargo-about
  • cargo-deny
  • cargo-fetcher
  • krates

Perfoamce

  • rpmalloc-rs
  • superluminal-perf
  • tame-gcs
  • tame-oauth

Automation

  • buildkite-jobify
  • wg-ui

Others

  • spdx

The automation part is easier for me. So I want to start from the wg-ui like the list below.

  • wg-ui
  • buildkit-jobify
  • cargo-fetcher

Took a quick look at their issues zone. There are some issues I really can make help to.

In the next blog, I will try to analyze source code and find some requirements to complete. If it fails to help in the end. A lot of things will be learned throughout the process.