diff --git a/src/cloudabi/mod.rs b/src/cloudabi/mod.rs
index df11de002ec629e1baeaf469448930488818c0fa..520ed8deee437ca8055bf7dad18fa9160d6e0b46 100644
--- a/src/cloudabi/mod.rs
+++ b/src/cloudabi/mod.rs
@@ -122,7 +122,9 @@ pub const PTHREAD_STACK_MIN: ::size_t = 1024;
 pub const SOCK_DGRAM: ::c_int = 128;
 pub const SOCK_STREAM: ::c_int = 130;
 
+#[cfg_attr(feature = "extra_traits", derive(Debug))]
 pub enum FILE {}
+#[cfg_attr(feature = "extra_traits", derive(Debug))]
 pub enum fpos_t {} // TODO: fill this out with a struct
 
 extern {
diff --git a/src/fuchsia/mod.rs b/src/fuchsia/mod.rs
index e785fabf8eae55af132b6c224554c0bd05f59d5a..351ec7e37d8011a01e8d5d481f74c8ef88b801e2 100644
--- a/src/fuchsia/mod.rs
+++ b/src/fuchsia/mod.rs
@@ -100,9 +100,13 @@ pub type c_ulong = u64;
 
 // FIXME: why are these uninhabited types? that seems... wrong?
 // Presumably these should be `()` or an `extern type` (when that stabilizes).
+#[cfg_attr(feature = "extra_traits", derive(Debug))]
 pub enum timezone {}
+#[cfg_attr(feature = "extra_traits", derive(Debug))]
 pub enum DIR {}
+#[cfg_attr(feature = "extra_traits", derive(Debug))]
 pub enum locale_t {}
+#[cfg_attr(feature = "extra_traits", derive(Debug))]
 pub enum fpos64_t {} // TODO: fill this out with a struct
 
 // PUB_STRUCT
@@ -3042,7 +3046,9 @@ f! {
 #[link(name = "fdio")]
 extern {}
 
+#[cfg_attr(feature = "extra_traits", derive(Debug))]
 pub enum FILE {}
+#[cfg_attr(feature = "extra_traits", derive(Debug))]
 pub enum fpos_t {} // TODO: fill this out with a struct
 
 extern {
diff --git a/src/lib.rs b/src/lib.rs
index 03e78041ab61702094c38ac32ee2b6020d7e12dd..86ab9b1368ace7cf424d1a38e7bbae242ffe7121 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -156,6 +156,8 @@
 #![cfg_attr(feature = "rustc-dep-of-std", no_core)]
 #![cfg_attr(feature = "rustc-dep-of-std", allow(warnings))]
 #![cfg_attr(not(any(feature = "use_std", feature = "rustc-dep-of-std")), no_std)]
+// Enable lints
+#![cfg_attr(feature = "extra_traits", deny(missing_debug_implementations))]
 
 #[cfg(all(not(cross_platform_docs), feature = "use_std"))]
 extern crate std as core;
diff --git a/src/redox/mod.rs b/src/redox/mod.rs
index 8dabd9063e169ce1588c26dd633ec1a28a727541..cfe7fd613b027a46041db273542c1de728ee3021 100644
--- a/src/redox/mod.rs
+++ b/src/redox/mod.rs
@@ -219,7 +219,9 @@ pub const SIGIO:     ::c_int = 29;
 pub const SIGPWR:    ::c_int = 30;
 pub const SIGSYS:    ::c_int = 31;
 
+#[cfg_attr(feature = "extra_traits", derive(Debug))]
 pub enum FILE {}
+#[cfg_attr(feature = "extra_traits", derive(Debug))]
 pub enum fpos_t {} // TODO: fill this out with a struct
 
 // intentionally not public, only used for fd_set
diff --git a/src/unix/bsd/apple/mod.rs b/src/unix/bsd/apple/mod.rs
index 08995917d433195d346df7f1858599bb04c3e3e5..bb48d22709f91e204f39ba5893708bb459677df7 100644
--- a/src/unix/bsd/apple/mod.rs
+++ b/src/unix/bsd/apple/mod.rs
@@ -34,6 +34,7 @@ pub type posix_spawn_file_actions_t = *mut ::c_void;
 pub type key_t = ::c_int;
 pub type shmatt_t = ::c_ushort;
 
+#[cfg_attr(feature = "extra_traits", derive(Debug))]
 pub enum timezone {}
 
 s! {
diff --git a/src/unix/bsd/freebsdlike/dragonfly/mod.rs b/src/unix/bsd/freebsdlike/dragonfly/mod.rs
index 992d0082e4919bc4492335e4f293bf045dda4c92..75afeb28fd57b192438fedcca5afe444abe56b7d 100644
--- a/src/unix/bsd/freebsdlike/dragonfly/mod.rs
+++ b/src/unix/bsd/freebsdlike/dragonfly/mod.rs
@@ -17,6 +17,7 @@ pub type fsfilcnt_t = u64;
 
 pub type sem_t = *mut sem;
 
+#[cfg_attr(feature = "extra_traits", derive(Debug))]
 pub enum sem {}
 
 s! {
diff --git a/src/unix/bsd/freebsdlike/mod.rs b/src/unix/bsd/freebsdlike/mod.rs
index 22c11b3698a32f850261eaeddae4a36d6449da27..a402269a4785f4147cf8447bfe5755c36e0ce294 100644
--- a/src/unix/bsd/freebsdlike/mod.rs
+++ b/src/unix/bsd/freebsdlike/mod.rs
@@ -16,6 +16,7 @@ pub type speed_t = ::c_uint;
 pub type nl_item = ::c_int;
 pub type id_t = i64;
 
+#[cfg_attr(feature = "extra_traits", derive(Debug))]
 pub enum timezone {}
 
 s! {
diff --git a/src/unix/bsd/netbsdlike/mod.rs b/src/unix/bsd/netbsdlike/mod.rs
index 291c081b97bc7538a388995e5bb22f092bd7d52c..dfe20518363ec1b71476590dc69467b906446a5b 100644
--- a/src/unix/bsd/netbsdlike/mod.rs
+++ b/src/unix/bsd/netbsdlike/mod.rs
@@ -13,7 +13,9 @@ pub type clockid_t = ::c_int;
 pub type id_t = ::uint32_t;
 pub type sem_t = *mut sem;
 
+#[cfg_attr(feature = "extra_traits", derive(Debug))]
 pub enum timezone {}
+#[cfg_attr(feature = "extra_traits", derive(Debug))]
 pub enum sem {}
 
 s! {
diff --git a/src/unix/haiku/mod.rs b/src/unix/haiku/mod.rs
index 2aa5d13a6738185b5d88bd98abb113aa38539dd4..a7fdffdc42daf748db57d17d4f94538241243f96 100644
--- a/src/unix/haiku/mod.rs
+++ b/src/unix/haiku/mod.rs
@@ -31,6 +31,7 @@ pub type nl_item = ::c_int;
 pub type id_t = i32;
 pub type idtype_t = ::c_uint;
 
+#[cfg_attr(feature = "extra_traits", derive(Debug))]
 pub enum timezone {}
 
 s! {
diff --git a/src/unix/mod.rs b/src/unix/mod.rs
index 88e13c58c7706c6ac46f813a9905332f3f65be41..bcd16f83ef608a4589ff0204db9a9e2e941fb2ed 100644
--- a/src/unix/mod.rs
+++ b/src/unix/mod.rs
@@ -41,7 +41,9 @@ pub type in_port_t = u16;
 pub type sighandler_t = ::size_t;
 pub type cc_t = ::c_uchar;
 
+#[cfg_attr(feature = "extra_traits", derive(Debug))]
 pub enum DIR {}
+#[cfg_attr(feature = "extra_traits", derive(Debug))]
 pub enum locale_t {}
 
 s! {
@@ -365,7 +367,9 @@ cfg_if! {
     }
 }
 
+#[cfg_attr(feature = "extra_traits", derive(Debug))]
 pub enum FILE {}
+#[cfg_attr(feature = "extra_traits", derive(Debug))]
 pub enum fpos_t {} // TODO: fill this out with a struct
 
 extern {
diff --git a/src/unix/notbsd/android/mod.rs b/src/unix/notbsd/android/mod.rs
index de4ff593a0ba745a8b866eaaa29e16d53aca5887..0e2eebf056e39c2e004cdd2f33e1b010cf450f67 100644
--- a/src/unix/notbsd/android/mod.rs
+++ b/src/unix/notbsd/android/mod.rs
@@ -264,7 +264,7 @@ impl std::fmt::Debug for dirent {
             .field("d_off", &self.d_off)
             .field("d_reclen", &self.d_reclen)
             .field("d_type", &self.d_type)
-            .field("d_name", &self.d_name)
+            // FIXME: .field("d_name", &self.d_name)
             .finish()
     }
 }
@@ -302,7 +302,7 @@ impl std::fmt::Debug for dirent64 {
             .field("d_off", &self.d_off)
             .field("d_reclen", &self.d_reclen)
             .field("d_type", &self.d_type)
-            .field("d_name", &self.d_name)
+            // FIXME: .field("d_name", &self.d_name)
             .finish()
     }
 }
@@ -374,7 +374,7 @@ impl std::fmt::Debug for lastlog {
         f.debug_struct("lastlog")
             .field("ll_time", &self.ll_time)
             .field("ll_line", &self.ll_line)
-            .field("ll_host", &self.ll_host)
+            // FIXME: .field("ll_host", &self.ll_host)
             .finish()
     }
 }
@@ -425,7 +425,7 @@ impl std::fmt::Debug for utmp {
             .field("ut_line", &self.ut_line)
             .field("ut_id", &self.ut_id)
             .field("ut_user", &self.ut_user)
-            .field("ut_host", &self.ut_host)
+            // FIXME: .field("ut_host", &self.ut_host)
             .field("ut_exit", &self.ut_exit)
             .field("ut_session", &self.ut_session)
             .field("ut_tv", &self.ut_tv)
diff --git a/src/unix/notbsd/emscripten.rs b/src/unix/notbsd/emscripten.rs
index 28791d8fd5ac74a59f853a197be22f641dabe677..069631c1ff883dd1bf7dcbdf87da94a96a9f2660 100644
--- a/src/unix/notbsd/emscripten.rs
+++ b/src/unix/notbsd/emscripten.rs
@@ -35,6 +35,7 @@ pub type c_long = i32;
 pub type c_ulong = u32;
 pub type nlink_t = u32;
 
+#[cfg_attr(feature = "extra_traits", derive(Debug))]
 pub enum fpos64_t {} // TODO: fill this out with a struct
 
 s! {
diff --git a/src/unix/notbsd/linux/mod.rs b/src/unix/notbsd/linux/mod.rs
index 31fc37922a890ce412ee312fde0edc2e19326878..3150887ab0dad4515ebe68629eeb753aa5d47d16 100644
--- a/src/unix/notbsd/linux/mod.rs
+++ b/src/unix/notbsd/linux/mod.rs
@@ -38,6 +38,7 @@ pub type Elf64_Sxword = i64;
 pub type Elf32_Section = u16;
 pub type Elf64_Section = u16;
 
+#[cfg_attr(feature = "extra_traits", derive(Debug))]
 pub enum fpos64_t {} // TODO: fill this out with a struct
 
 s! {
diff --git a/src/unix/notbsd/mod.rs b/src/unix/notbsd/mod.rs
index 4b06e6e6f6613cab09d0a76bd13ee550d538768c..7913508455523569cb92f75255ad9591dc97c24a 100644
--- a/src/unix/notbsd/mod.rs
+++ b/src/unix/notbsd/mod.rs
@@ -8,6 +8,7 @@ pub type clockid_t = ::c_int;
 pub type key_t = ::c_int;
 pub type id_t = ::c_uint;
 
+#[cfg_attr(feature = "extra_traits", derive(Debug))]
 pub enum timezone {}
 
 s! {
diff --git a/src/unix/solaris/mod.rs b/src/unix/solaris/mod.rs
index c991e62045c313d97114c89cfddce8ff685cf355..c10f4c184466956dec94cb9ab8df33d179bb3610 100644
--- a/src/unix/solaris/mod.rs
+++ b/src/unix/solaris/mod.rs
@@ -36,6 +36,7 @@ pub type nl_item = ::c_int;
 pub type id_t = ::c_int;
 pub type idtype_t = ::c_uint;
 
+#[cfg_attr(feature = "extra_traits", derive(Debug))]
 pub enum timezone {}
 
 s! {
diff --git a/src/unix/uclibc/mod.rs b/src/unix/uclibc/mod.rs
index c04c22aad9f419c35f945ccf2c41c9b9761bd2ba..e0620048dca632755530fc807006b7b40cfeab49 100644
--- a/src/unix/uclibc/mod.rs
+++ b/src/unix/uclibc/mod.rs
@@ -24,8 +24,10 @@ pub type nfds_t = ::c_ulong;
 pub type nl_item = ::c_int;
 pub type idtype_t = ::c_uint;
 
+#[cfg_attr(feature = "extra_traits", derive(Debug))]
 pub enum fpos64_t {} // TODO: fill this out with a struct
 
+#[cfg_attr(feature = "extra_traits", derive(Debug))]
 pub enum timezone {}
 
 s! {
diff --git a/src/windows/mod.rs b/src/windows/mod.rs
index 4bea45980b5757ef7101e371963ed3c36e736a2d..9deaf9b995293a75e21ab3cfa94a1773de312847 100644
--- a/src/windows/mod.rs
+++ b/src/windows/mod.rs
@@ -47,6 +47,7 @@ cfg_if! {
 pub type off_t = i32;
 pub type dev_t = u32;
 pub type ino_t = u16;
+#[cfg_attr(feature = "extra_traits", derive(Debug))]
 pub enum timezone {}
 pub type time64_t = i64;
 
@@ -201,7 +202,9 @@ pub const SIG_ERR: ::c_int = -1;
 #[link(name = "libcmt", cfg(target_feature = "crt-static"))]
 extern {}
 
+#[cfg_attr(feature = "extra_traits", derive(Debug))]
 pub enum FILE {}
+#[cfg_attr(feature = "extra_traits", derive(Debug))]
 pub enum fpos_t {} // TODO: fill this out with a struct
 
 extern {
@@ -446,4 +449,4 @@ cfg_if! {
     } else {
         // Unknown target_env
     }
-}
\ No newline at end of file
+}