Skip to content
Blog

Godot Multiplayer on Linux With Anti-Cheat: Lessons From EVE Vanguard's Alpha

6 min read
Illustration of a dedicated game server connected to Linux and handheld gaming clients in a control room

Why EVE Vanguard's November Alpha Is a Useful Reference

CCP's extraction shooter EVE Vanguard is headed into Alpha in November with Linux support confirmed to work alongside its anti-cheat solution. That detail matters because competitive shooters have historically treated Linux as an afterthought, or blocked it entirely when anti-cheat was required.

For teams building godot multiplayer games, this is a planning signal, not just news. Players on Steam Deck, SteamOS desktops, and traditional Linux distributions now expect day one support. If a large scale extraction shooter with persistent progression can commit to Linux plus anti-cheat for an Alpha, indie teams need a credible answer for their own Steam page FAQ.

The lesson is not to copy Vanguard's exact stack. It is to decide early whether you will ship a native Linux build, rely on Proton, and how much authority you give the client. Those three decisions shape your networking code, your Steamworks setup, and your testing plan.

Choose Your Anti-Cheat Strategy Before You Write Netcode

Godot has no built in kernel level anti-cheat, and that is unlikely to change. On Linux there is no equivalent to a Windows kernel driver that players will tolerate, so every workable plan combines server authority with a client side check.

ApproachHow it works on LinuxFit for a small team
Server authoritative validationServer simulates movement, damage, and inventory, client only sends inputsBest default, no vendor lock in
Proton enabled vendor solutionEasy Anti-Cheat or BattlEye with Proton support enabled by the developerStrong for Steam, requires approval and testing
Account and behavior checksSteam authentication, rate limits, replay review, and stat analysisLightweight, good for playtests
If you cannot trust the client, do not let the client decide outcomes. Let it suggest inputs and let the server confirm them.

Pick one primary model during preproduction:

  • Server authoritative custom logic: You validate position, fire rate, line of sight, and pickups on a dedicated server. This catches speed hacks and inventory spoofing without any client driver.
  • Vendor anti-cheat through Steam: If you need stronger client checks, plan for a provider that explicitly supports Proton. Native Linux builds need a native client module, Proton builds need the Proton runtime flag enabled.
  • Social and account layer: Require linked Steam accounts, delay ranked access for new accounts, and log suspicious snapshots for manual review.
Diagram showing a dedicated game server validating inputs from a Linux desktop client and a handheld Steam client

Most indie shooters should start with the first and third options, then add a vendor solution only when cheating costs you players.

Ship Linux Builds on Steam Without Breaking Trust

Linux support fails most often at packaging and testing, not at engine features. Decide whether Steam players will run your native Linux export or your Windows build under Proton, then test anti-cheat in that exact path.

  1. Create separate export presets for Windows and Linux, using the same Godot version and export templates. Name them clearly so automated builds do not mix binaries.
  2. Integrate Steam authentication with GodotSteam or the Steamworks API. Use Steam IDs for player identity so bans and mutes survive reinstalls.
  3. If you use Proton, enable your anti-cheat provider's Proton support in the vendor dashboard and verify the runtime downloads on a clean Steam Deck.
  4. If you ship native Linux, test on SteamOS stable, Ubuntu LTS, and one rolling release. Record kernel, Mesa, and Proton versions for every bug report.
  5. Check your file dependencies, executable flags, and case sensitivity. The ARM64 export checklist for Steam Frame games is a useful reference for the export and device testing discipline Steam hardware now requires.

Keep one build ID for press and playtesters that matches your public Steam branch. Anti-cheat mismatches almost always come from testers running a side loaded build without the correct Steam App ID.

How to talk about Linux support in your Alpha FAQ

Be explicit. State whether Linux means native support or Proton support, which anti-cheat you use, and whether Steam Deck is officially supported. Vanguard earned goodwill by answering this before launch. You can do the same in two sentences and avoid weeks of forum confusion.

Build Indie FPS Networking That Assumes Cheaters

Extraction shooters and arena shooters share the same cheat vectors: modified position, impossible aim snaps, wall visibility, and forged remote procedure calls. The fix is boring and effective. Validate everything important on the server.

Use a dedicated server authority model even if you start with listen servers for prototyping. Godot's MultiplayerAPI lets you mark logic with authority checks, but you still need game specific limits.

var last_shot_msec: Dictionary = {}
const FIRE_INTERVAL_MSEC := 140
const MAX_SPEED := 6.5

func _on_client_fire_request(player_id: int, muzzle_pos: Vector3, aim_dir: Vector3) -> void:
  if not multiplayer.is_server():
    return
  var now := Time.get_ticks_msec()
  if now - int(last_shot_msec.get(player_id, 0)) < FIRE_INTERVAL_MSEC:
    return
  last_shot_msec[player_id] = now
  if not _has_line_of_sight(muzzle_pos, muzzle_pos + aim_dir * 80.0):
    return
  _apply_server_damage(player_id, muzzle_pos, aim_dir)

func _validate_move(player_id: int, old_pos: Vector3, new_pos: Vector3, delta: float) -> Vector3:
  var max_dist := MAX_SPEED * delta + 0.25
  if old_pos.distance_to(new_pos) > max_dist:
    return old_pos
  return new_pos

This pattern solves three common problems:

  • Fire rate hacks: Timestamps and intervals on the server ignore client side cooldown edits.
  • Teleport and speed hacks: Distance checks clamp movement to what physics allows for that tick.
  • Forged RPCs: Early returns for non server peers plus Steam ID mapping stop spoofed sender IDs.

Add rate limits for chat, interaction, and loot RPCs, and replicate only what each client needs. Do not send enemy positions through walls if your design allows server side culling. Less replicated data means fewer wallhacks.

When desyncs appear, resist rewriting netcode from scratch. Narrow the bug to one system at a time and start asking it to unblock you with logs, tick dumps, and reproduction steps rather than asking for a full rewrite.

A Playtest Ready Checklist for Linux Plus Anti-Cheat

Use this list four weeks before any public Alpha:

  1. Lock your netcode authority model and document which RPCs the server trusts.
  2. Confirm your anti-cheat path on both native Linux and Proton, with clean install tests.
  3. Run a 10 to 20 player stress test on a Linux dedicated server and record tick rate, bandwidth per player, and CPU headroom.
  4. Test Steam Deck performance with realistic settings, including reduced shadow distance and capped physics ticks.
  5. Publish your Linux support statement, minimum distribution, and cheat reporting flow.
  6. Set up server logging for teleports, impossible shots, and RPC floods so your first Alpha teaches you something.

Vanguard's November Alpha shows that Linux and anti-cheat can coexist when the plan is made early. Start server authoritative, test the exact Steam path your players will use, and add stronger client checks only when your community needs them.

Was this helpful?

Comments