diff --git a/CMakeLists.txt b/CMakeLists.txt
index 86deb4b7..ec478365 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -15,7 +15,7 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
-cmake_minimum_required (VERSION 3.4)
+cmake_minimum_required (VERSION 3.5)
project (barrier C CXX)
option (BARRIER_BUILD_GUI "Build the GUI" ON)
diff --git a/COMPILATION_GUIDE.md b/COMPILATION_GUIDE.md
new file mode 100644
index 00000000..53dced94
--- /dev/null
+++ b/COMPILATION_GUIDE.md
@@ -0,0 +1,265 @@
+# Barrier Linux Compilation Guide
+
+## Exact Steps Performed (What We Actually Did)
+
+This section documents the exact sequence of commands and fixes applied to successfully build Barrier on WSL2/Ubuntu.
+
+### 1. Fixed CMake Version Requirements
+Updated minimum CMake version from 3.4 to 3.5 in three files:
+
+**File 1:** `CMakeLists.txt` (line 18)
+```cmake
+# Changed from:
+cmake_minimum_required (VERSION 3.4)
+# To:
+cmake_minimum_required (VERSION 3.5)
+```
+
+**File 2:** `cmake/Version.cmake` (line 1)
+```cmake
+# Changed from:
+cmake_minimum_required (VERSION 3.4)
+# To:
+cmake_minimum_required (VERSION 3.5)
+```
+
+**File 3:** `src/gui/CMakeLists.txt` (line 1)
+```cmake
+# Changed from:
+cmake_minimum_required (VERSION 3.4)
+# To:
+cmake_minimum_required (VERSION 3.5)
+```
+
+### 2. Installed Dependencies
+```bash
+sudo apt install -y libcurl4-openssl-dev qtbase5-dev qttools5-dev-tools libssl-dev libx11-dev libxtst-dev libxinerama-dev libxss-dev libxi-dev libxrandr-dev libavahi-compat-libdnssd-dev
+```
+
+### 3. Fixed Missing Headers
+**File 1:** `src/lib/base/String.h`
+Added missing header after line 25:
+```cpp
+#include
+#include
+#include // ADDED THIS LINE
+```
+
+**File 2:** `src/lib/net/FingerprintData.h`
+Added missing header after line 22:
+```cpp
+#include
+#include
+#include // ADDED THIS LINE
+```
+
+### 4. Build
+```bash
+cd "/mnt/c/D Drive/CAPTAIN/CodeProjects/barrier"
+./clean_build.sh
+```
+
+### 5. Verify Build Output
+```bash
+ls -la "/mnt/c/D Drive/CAPTAIN/CodeProjects/barrier/build/bin/"
+```
+**Files created:**
+- `barriers` (12,709,936 bytes) - Server executable
+- `barrierc` (10,165,752 bytes) - Client executable
+- `integtests` (20,092,176 bytes) - Integration tests
+- `unittests` (15,227,792 bytes) - Unit tests
+
+### 6. Test Functionality
+```bash
+cd "/mnt/c/D Drive/CAPTAIN/CodeProjects/barrier/build/bin"
+./barrierc
+```
+**Result:** ✅ Successfully connected to server
+
+---
+
+## General Compilation Guide
+
+### Prerequisites
+
+#### System Requirements
+- Ubuntu/Debian-based Linux distribution
+- CMake 4.0+ (installed via snap)
+- GCC 13.3.0
+- Git
+
+#### Required Dependencies
+
+Install the following packages:
+
+```bash
+sudo apt update
+sudo apt install -y \
+ libcurl4-openssl-dev \
+ qtbase5-dev \
+ qttools5-dev-tools \
+ libssl-dev \
+ libx11-dev \
+ libxtst-dev \
+ libxinerama-dev \
+ libxss-dev \
+ libxi-dev \
+ libxrandr-dev \
+ libavahi-compat-libdnssd-dev
+```
+
+**Note on Package Names:**
+- Use `qtbase5-dev` instead of the deprecated `qt5-default`
+- Use `libavahi-compat-libdnssd-dev` instead of `avahi-compat-libdns_sd-dev`
+
+### Source Code Fixes Required
+
+The original Barrier source code requires several fixes to compile with modern toolchains:
+
+#### 1. CMake Minimum Version Updates
+
+**Files to modify:**
+- `CMakeLists.txt` (line 18)
+- `cmake/Version.cmake` (line 1)
+- `src/gui/CMakeLists.txt` (line 1)
+
+**Change:**
+```cmake
+# FROM:
+cmake_minimum_required (VERSION 3.4)
+
+# TO:
+cmake_minimum_required (VERSION 3.5)
+```
+
+**Reason:** CMake 4.0+ no longer supports compatibility with CMake < 3.5
+
+#### 2. Missing C++ Headers
+
+**File:** `src/lib/base/String.h`
+
+**Add after existing includes:**
+```cpp
+#include
+#include
+#include // ADD THIS LINE
+```
+
+**File:** `src/lib/net/FingerprintData.h`
+
+**Add after existing includes:**
+```cpp
+#include
+#include
+#include // ADD THIS LINE
+```
+
+**Reason:** Modern C++ compilers require explicit inclusion of `` for `std::uint8_t` types
+
+### Compilation Process
+
+#### 1. Clone and Navigate
+```bash
+git clone
+cd barrier
+```
+
+#### 2. Initialize Submodules
+```bash
+git submodule update --init --recursive
+```
+
+#### 3. Apply Source Code Fixes
+Apply all the fixes mentioned in the "Source Code Fixes Required" section above.
+
+#### 4. Build
+```bash
+./clean_build.sh
+```
+
+**Alternative manual build:**
+```bash
+mkdir build && cd build
+cmake -DCMAKE_BUILD_TYPE=Debug ..
+make
+```
+
+### Build Output
+
+#### Successful Build Results
+- **Location:** `build/bin/`
+- **Core executables:**
+ - `barriers` (~12.7MB) - Server component
+ - `barrierc` (~10.2MB) - Client component
+ - `barrier` - GUI application (if Qt build completes)
+ - `integtests` - Integration tests
+ - `unittests` - Unit tests
+
+#### Expected Warnings
+- OpenSSL deprecation warnings (non-critical)
+- CMake compatibility warnings (non-critical)
+- Clock skew warnings in WSL (non-critical)
+
+### Usage
+
+#### Server Mode
+```bash
+cd build/bin
+./barriers
+```
+
+#### Client Mode
+```bash
+cd build/bin
+./barrierc
+```
+
+#### GUI Mode (if available)
+```bash
+cd build/bin
+./barrier
+```
+
+### Troubleshooting
+
+#### Common Issues
+
+1. **Missing Qt5**: Install `qtbase5-dev` instead of `qt5-default`
+2. **Missing Avahi**: Use `libavahi-compat-libdnssd-dev` package name
+3. **uint8_t errors**: Add `#include ` to header files
+4. **CMake version errors**: Update minimum version requirements to 3.5
+5. **CURL not found**: Install `libcurl4-openssl-dev`
+
+#### Build Environment Notes
+- **WSL Users**: No GUI display available by default
+- **X11 Required**: For actual mouse/keyboard sharing functionality
+- **Network**: Ensure firewall allows Barrier traffic (default port 24800)
+
+### Platform-Specific Notes
+
+#### Windows Build (Alternative)
+If building on Windows instead of Linux:
+- Requires Visual Studio 2019/2022
+- Requires Qt 5.11.1 at `C:\Qt\5.11.1\msvc2017_64`
+- Requires Bonjour SDK at `C:\Program Files\Bonjour SDK`
+- Use `clean_build.bat` instead of `clean_build.sh`
+
+#### Linux Desktop Environment
+For full functionality, Barrier requires:
+- X11 or Wayland display server
+- Desktop environment (GNOME, KDE, etc.)
+- Proper graphics drivers
+
+### Version Information
+- **Barrier Version:** 2.4.0
+- **Build System:** CMake + Make
+- **Compiler:** GCC 13.3.0
+- **Target Platform:** Linux x86_64
+
+### Summary of Changes Made
+1. Updated CMake minimum version requirements (3 files)
+2. Added missing `#include ` headers (2 files)
+3. Installed correct Linux development packages
+4. Used appropriate package names for Ubuntu 24.04+
+
+This guide should enable successful compilation of Barrier on modern Linux systems.
\ No newline at end of file
diff --git a/cmake/Version.cmake b/cmake/Version.cmake
index 73524bf1..dfb83bbb 100644
--- a/cmake/Version.cmake
+++ b/cmake/Version.cmake
@@ -1,4 +1,4 @@
-cmake_minimum_required (VERSION 3.4)
+cmake_minimum_required (VERSION 3.5)
set (BARRIER_VERSION_MAJOR 2)
set (BARRIER_VERSION_MINOR 4)
diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt
index 570e8424..fbad2ec7 100644
--- a/src/gui/CMakeLists.txt
+++ b/src/gui/CMakeLists.txt
@@ -1,4 +1,4 @@
-cmake_minimum_required (VERSION 3.4)
+cmake_minimum_required (VERSION 3.5)
find_package (Qt5 REQUIRED COMPONENTS Core Widgets Network)
set (CMAKE_AUTOMOC ON)
diff --git a/src/lib/base/String.h b/src/lib/base/String.h
index 9c5a53ba..faf35969 100644
--- a/src/lib/base/String.h
+++ b/src/lib/base/String.h
@@ -23,6 +23,7 @@
#include
#include
+#include
// use standard C++ string class for our string class
typedef std::string String;
diff --git a/src/lib/net/FingerprintData.h b/src/lib/net/FingerprintData.h
index 938a6953..8ab16314 100644
--- a/src/lib/net/FingerprintData.h
+++ b/src/lib/net/FingerprintData.h
@@ -20,6 +20,7 @@
#include
#include
+#include
namespace barrier {