diff --git a/src/proc/bin/starnix/fs/fd.rs b/src/proc/bin/starnix/fs/fd.rs
index e8836ed..5ce14cf 100644
--- a/src/proc/bin/starnix/fs/fd.rs
+++ b/src/proc/bin/starnix/fs/fd.rs
@@ -16,10 +16,10 @@
 pub use starnix_macros::FileObject;
 
 #[derive(Hash, PartialEq, Eq, Debug, Copy, Clone)]
-pub struct FileDescriptor(i32);
-impl FileDescriptor {
-    pub fn from_raw(n: i32) -> FileDescriptor {
-        FileDescriptor(n)
+pub struct FdNumber(i32);
+impl FdNumber {
+    pub fn from_raw(n: i32) -> FdNumber {
+        FdNumber(n)
     }
     pub fn raw(&self) -> i32 {
         self.0
@@ -155,7 +155,7 @@
 }
 
 pub struct FdTable {
-    table: RwLock<HashMap<FileDescriptor, FdTableEntry>>,
+    table: RwLock<HashMap<FdNumber, FdTableEntry>>,
 }
 
 impl FdTable {
@@ -163,27 +163,27 @@
         FdTable { table: RwLock::new(HashMap::new()) }
     }
 
-    pub fn install_fd(&self, file: FileHandle) -> Result<FileDescriptor, Errno> {
+    pub fn install_fd(&self, file: FileHandle) -> Result<FdNumber, Errno> {
         let mut table = self.table.write();
-        let mut fd = FileDescriptor::from_raw(0);
+        let mut fd = FdNumber::from_raw(0);
         while table.contains_key(&fd) {
-            fd = FileDescriptor::from_raw(fd.raw() + 1);
+            fd = FdNumber::from_raw(fd.raw() + 1);
         }
         table.insert(fd, FdTableEntry { file, flags: FdFlags::empty() });
         Ok(fd)
     }
 
-    pub fn get(&self, fd: FileDescriptor) -> Result<FileHandle, Errno> {
+    pub fn get(&self, fd: FdNumber) -> Result<FileHandle, Errno> {
         let table = self.table.read();
         table.get(&fd).map(|entry| entry.file.clone()).ok_or_else(|| EBADF)
     }
 
-    pub fn get_flags(&self, fd: FileDescriptor) -> Result<FdFlags, Errno> {
+    pub fn get_flags(&self, fd: FdNumber) -> Result<FdFlags, Errno> {
         let table = self.table.read();
         table.get(&fd).map(|entry| entry.flags).ok_or_else(|| EBADF)
     }
 
-    pub fn set_flags(&self, fd: FileDescriptor, flags: FdFlags) -> Result<(), Errno> {
+    pub fn set_flags(&self, fd: FdNumber, flags: FdFlags) -> Result<(), Errno> {
         let mut table = self.table.write();
         table
             .get_mut(&fd)
@@ -211,6 +211,6 @@
 
         assert!(Arc::ptr_eq(&table.get(fd_num).unwrap(), &test_file));
         assert!(Arc::ptr_eq(&table.get(fd_num2).unwrap(), &test_file));
-        assert_eq!(table.get(FileDescriptor::from_raw(fd_num2.raw() + 1)).map(|_| ()), Err(EBADF));
+        assert_eq!(table.get(FdNumber::from_raw(fd_num2.raw() + 1)).map(|_| ()), Err(EBADF));
     }
 }
diff --git a/src/proc/bin/starnix/syscall_table.rs b/src/proc/bin/starnix/syscall_table.rs
index ac5420e..4a13a4a 100644
--- a/src/proc/bin/starnix/syscall_table.rs
+++ b/src/proc/bin/starnix/syscall_table.rs
@@ -5,7 +5,7 @@
 use paste::paste;
 use zerocopy::{AsBytes, FromBytes};
 
-use crate::fs::FileDescriptor;
+use crate::fs::FdNumber;
 use crate::syscalls::*;
 use crate::uapi::*;
 
@@ -50,9 +50,9 @@
     }
 }
 
-impl FromSyscallArg for FileDescriptor {
-    fn from_arg(arg: u64) -> FileDescriptor {
-        FileDescriptor::from_raw(arg as i32)
+impl FromSyscallArg for FdNumber {
+    fn from_arg(arg: u64) -> FdNumber {
+        FdNumber::from_raw(arg as i32)
     }
 }
 trait IntoSyscallArg<T> {
diff --git a/src/proc/bin/starnix/syscalls.rs b/src/proc/bin/starnix/syscalls.rs
index e950e09..f49600a 100644
--- a/src/proc/bin/starnix/syscalls.rs
+++ b/src/proc/bin/starnix/syscalls.rs
@@ -37,7 +37,7 @@
 
 pub fn sys_write(
     ctx: &SyscallContext<'_>,
-    fd: FileDescriptor,
+    fd: FdNumber,
     buffer: UserAddress,
     count: usize,
 ) -> Result<SyscallResult, Errno> {
@@ -47,7 +47,7 @@
 
 pub fn sys_fcntl(
     ctx: &SyscallContext<'_>,
-    fd: FileDescriptor,
+    fd: FdNumber,
     cmd: u32,
     arg: u64,
 ) -> Result<SyscallResult, Errno> {
@@ -81,7 +81,7 @@
 
 pub fn sys_fstat(
     ctx: &SyscallContext<'_>,
-    fd: FileDescriptor,
+    fd: FdNumber,
     buffer: UserRef<stat_t>,
 ) -> Result<SyscallResult, Errno> {
     let file = ctx.task.files.get(fd)?;
@@ -110,7 +110,7 @@
     length: usize,
     prot: u32,
     flags: u32,
-    fd: FileDescriptor,
+    fd: FdNumber,
     offset: usize,
 ) -> Result<SyscallResult, Errno> {
     // These are the flags that are currently supported.
@@ -260,7 +260,7 @@
 
 pub fn sys_pread64(
     ctx: &SyscallContext<'_>,
-    fd: FileDescriptor,
+    fd: FdNumber,
     buf: UserAddress,
     count: usize,
     offset: usize,
@@ -272,7 +272,7 @@
 
 pub fn sys_writev(
     ctx: &SyscallContext<'_>,
-    fd: FileDescriptor,
+    fd: FdNumber,
     iovec_addr: UserAddress,
     iovec_count: i32,
 ) -> Result<SyscallResult, Errno> {
@@ -388,7 +388,7 @@
 
 pub fn sys_fstatfs(
     ctx: &SyscallContext<'_>,
-    _fd: FileDescriptor,
+    _fd: FdNumber,
     user_buf: UserRef<statfs>,
 ) -> Result<SyscallResult, Errno> {
     let result = statfs::default();
@@ -634,7 +634,7 @@
 
 pub fn sys_ioctl(
     ctx: &SyscallContext<'_>,
-    fd: FileDescriptor,
+    fd: FdNumber,
     request: u32,
     in_addr: UserAddress,
     out_addr: UserAddress,
@@ -684,7 +684,7 @@
             length.try_into().unwrap(),
             PROT_READ | PROT_WRITE,
             MAP_ANONYMOUS | MAP_PRIVATE,
-            FileDescriptor::from_raw(-1),
+            FdNumber::from_raw(-1),
             0,
         )
         .unwrap()
diff --git a/src/proc/bin/starnix/uapi.rs b/src/proc/bin/starnix/uapi.rs
index 8546da5..9467820 100644
--- a/src/proc/bin/starnix/uapi.rs
+++ b/src/proc/bin/starnix/uapi.rs
@@ -11,7 +11,7 @@
 use std::fmt;
 use zerocopy::{AsBytes, FromBytes};
 
-use crate::fs::FileDescriptor;
+use crate::fs::FdNumber;
 pub use crate::user_address::*;
 
 #[cfg(target_arch = "x86_64")]
@@ -667,8 +667,8 @@
     }
 }
 
-impl From<FileDescriptor> for SyscallResult {
-    fn from(value: FileDescriptor) -> Self {
+impl From<FdNumber> for SyscallResult {
+    fn from(value: FdNumber) -> Self {
         SyscallResult::Success(value.raw() as u64)
     }
 }
