Rename pw_dumb_io to pw_sys_io

Rename pw_dumb_io facade and backends to use the more deliberate name
pw_sys_io moving forward.

Change-Id: I968480715967ab8de491856afa1b7692b973ed7e
diff --git a/BUILD.gn b/BUILD.gn
index 738f087..c63a20b 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -43,7 +43,7 @@
 group("pw_facades") {
   deps = [
     "$dir_pw_cpu_exception",
-    "$dir_pw_dumb_io",
+    "$dir_pw_sys_io",
   ]
 }
 
diff --git a/CMakeLists.txt b/CMakeLists.txt
index c9e6b7d..3631ad9 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -25,8 +25,6 @@
 add_subdirectory(pw_containers)
 add_subdirectory(pw_cpu_exception)
 add_subdirectory(pw_cpu_exception_armv7m)
-add_subdirectory(pw_dumb_io)
-add_subdirectory(pw_dumb_io_stdio)
 add_subdirectory(pw_kvs)
 add_subdirectory(pw_log)
 add_subdirectory(pw_log_basic)
@@ -36,6 +34,8 @@
 add_subdirectory(pw_span)
 add_subdirectory(pw_status)
 add_subdirectory(pw_string)
+add_subdirectory(pw_sys_io)
+add_subdirectory(pw_sys_io_stdio)
 add_subdirectory(pw_tokenizer)
 add_subdirectory(pw_unit_test)
 add_subdirectory(pw_varint)
diff --git a/docs/BUILD.gn b/docs/BUILD.gn
index 8d5b7c8..5bc0f00 100644
--- a/docs/BUILD.gn
+++ b/docs/BUILD.gn
@@ -46,9 +46,6 @@
     "$dir_pw_cpu_exception_armv7m:docs",
     "$dir_pw_docgen:docs",
     "$dir_pw_doctor:docs",
-    "$dir_pw_dumb_io:docs",
-    "$dir_pw_dumb_io_baremetal_stm32f429:docs",
-    "$dir_pw_dumb_io_stdio:docs",
     "$dir_pw_log:docs",
     "$dir_pw_minimal_cpp_stdlib:docs",
     "$dir_pw_module:docs",
@@ -60,6 +57,9 @@
     "$dir_pw_span:docs",
     "$dir_pw_status:docs",
     "$dir_pw_string:docs",
+    "$dir_pw_sys_io:docs",
+    "$dir_pw_sys_io_baremetal_stm32f429:docs",
+    "$dir_pw_sys_io_stdio:docs",
     "$dir_pw_target_runner:docs",
     "$dir_pw_tokenizer:docs",
   ]
diff --git a/modules.gni b/modules.gni
index 6138f24..ddc253f 100644
--- a/modules.gni
+++ b/modules.gni
@@ -28,10 +28,6 @@
 dir_pw_cpu_exception_armv7m = "$dir_pigweed/pw_cpu_exception_armv7m"
 dir_pw_docgen = "$dir_pigweed/pw_docgen"
 dir_pw_doctor = "$dir_pigweed/pw_doctor"
-dir_pw_dumb_io = "$dir_pigweed/pw_dumb_io"
-dir_pw_dumb_io_baremetal_stm32f429 =
-    "$dir_pigweed/pw_dumb_io_baremetal_stm32f429"
-dir_pw_dumb_io_stdio = "$dir_pigweed/pw_dumb_io_stdio"
 dir_pw_kvs = "$dir_pigweed/pw_kvs"
 dir_pw_log = "$dir_pigweed/pw_log"
 dir_pw_log_basic = "$dir_pigweed/pw_log_basic"
@@ -45,6 +41,9 @@
 dir_pw_span = "$dir_pigweed/pw_span"
 dir_pw_status = "$dir_pigweed/pw_status"
 dir_pw_string = "$dir_pigweed/pw_string"
+dir_pw_sys_io = "$dir_pigweed/pw_sys_io"
+dir_pw_sys_io_baremetal_stm32f429 = "$dir_pigweed/pw_sys_io_baremetal_stm32f429"
+dir_pw_sys_io_stdio = "$dir_pigweed/pw_sys_io_stdio"
 dir_pw_target_runner = "$dir_pigweed/pw_target_runner"
 dir_pw_tokenizer = "$dir_pigweed/pw_tokenizer"
 dir_pw_toolchain = "$dir_pigweed/pw_toolchain"
diff --git a/pw_assert_basic/BUILD b/pw_assert_basic/BUILD
index 6a04d08..418de24 100644
--- a/pw_assert_basic/BUILD
+++ b/pw_assert_basic/BUILD
@@ -35,8 +35,8 @@
         "public_overrides",
     ],
     deps = [
-        "//pw_dumb_io",
         "//pw_assert:facade",
         "//pw_string",
+        "//pw_sys_io",
     ],
 )
diff --git a/pw_assert_basic/BUILD.gn b/pw_assert_basic/BUILD.gn
index dab7606..9b39a97 100644
--- a/pw_assert_basic/BUILD.gn
+++ b/pw_assert_basic/BUILD.gn
@@ -36,9 +36,9 @@
   public_configs = [ ":default_config" ]
   deps = [
     "$dir_pw_assert:facade",
-    "$dir_pw_dumb_io",
     "$dir_pw_preprocessor",
     "$dir_pw_string",
+    "$dir_pw_sys_io",
   ]
   public = [ "public/pw_assert_basic/assert_basic.h" ]
   sources = public + [ "assert_basic.cc" ]
diff --git a/pw_assert_basic/CMakeLists.txt b/pw_assert_basic/CMakeLists.txt
index 432e5f9..7e6c46a 100644
--- a/pw_assert_basic/CMakeLists.txt
+++ b/pw_assert_basic/CMakeLists.txt
@@ -16,9 +16,9 @@
   IMPLEMENTS_FACADE
     pw_assert
   PRIVATE_DEPS
-    pw_dumb_io
     pw_preprocessor
     pw_string
+    pw_sys_io
 )
 
 target_include_directories(pw_assert_basic PUBLIC public_overrides)
diff --git a/pw_assert_basic/assert_basic.cc b/pw_assert_basic/assert_basic.cc
index b6abdb1..3046ba6 100644
--- a/pw_assert_basic/assert_basic.cc
+++ b/pw_assert_basic/assert_basic.cc
@@ -21,9 +21,9 @@
 
 #include <cstring>
 
-#include "pw_dumb_io/dumb_io.h"
 #include "pw_preprocessor/util.h"
 #include "pw_string/string_builder.h"
+#include "pw_sys_io/sys_io.h"
 
 // TODO(pwbug/17): Expose these through the config system.
 #define PW_ASSERT_BASIC_SHOW_BANNER 1
@@ -73,7 +73,7 @@
     " ",
 };
 
-using pw::dumb_io::WriteLine;
+using pw::sys_io::WriteLine;
 
 typedef pw::StringBuffer<150> Buffer;
 
@@ -104,7 +104,7 @@
     va_start(args, message);
     buffer.FormatVaList(message, args);
     va_end(args);
-    pw::dumb_io::WriteLine(buffer.view());
+    WriteLine(buffer.view());
   }
 
   WriteLine("");
diff --git a/pw_boot_armv7m/BUILD b/pw_boot_armv7m/BUILD
index 0c78627..0980c0a 100644
--- a/pw_boot_armv7m/BUILD
+++ b/pw_boot_armv7m/BUILD
@@ -17,7 +17,7 @@
 licenses(["notice"])  # Apache License 2.0
 
 filegroup(
-    name = "pw_dumb_io_baremetal_stm32f429",
+    name = "pw_boot_armv7m",
     srcs = [
         "core_init.c",
         "public/pw_boot_armv7m/boot.h",
diff --git a/pw_cpu_exception_armv7m/BUILD.gn b/pw_cpu_exception_armv7m/BUILD.gn
index d627ab7..a23a396 100644
--- a/pw_cpu_exception_armv7m/BUILD.gn
+++ b/pw_cpu_exception_armv7m/BUILD.gn
@@ -27,8 +27,8 @@
     public_configs = [ ":default_config" ]
     deps = [
       "$dir_pw_cpu_exception:facade",
-      "$dir_pw_dumb_io:default_putget_bytes",
       "$dir_pw_preprocessor",
+      "$dir_pw_sys_io:default_putget_bytes",
     ]
     public = [ "public/pw_cpu_exception_armv7m/cpu_state.h" ]
     sources = [
diff --git a/pw_dumb_io_stdio/docs.rst b/pw_dumb_io_stdio/docs.rst
deleted file mode 100644
index c97a16b..0000000
--- a/pw_dumb_io_stdio/docs.rst
+++ /dev/null
@@ -1,39 +0,0 @@
-.. _chapter-pw-dumb-io-stdio:
-
-.. default-domain:: cpp
-
-.. highlight:: sh
-
-----------------
-pw_dumb_io_stdio
-----------------
-The ``pw_dumb_io_stdio`` backend implements the ``pw_dumb_io`` facade using
-stdio.
-
-Why not just use stdio directly?
---------------------------------
-
-The nice thing about using ``pw_dumb_io`` is that it's rather easy to get a
-board up and running with a target-specific backend. This means when drafting
-out a quick application you can write it against ``pw_dumb_io`` and, with some
-care, the application will be able to run on both host and target devices.
-
-While it's not recommended to use ``pw_dumb_io`` for any production
-applications, it can be rather helpful for early prototyping.
-
-Setup
-=====
-This module requires relatively minimal setup:
-
-  1. Write code against the ``pw_dumb_io`` facade.
-  2. Specify the ``dir_pw_dumb_io_backend`` GN global variable to point to this
-     backend.
-
-Module usage
-============
-For the most part, applications built with this backend will behave similarly
-to an application built directly against stdio.
-
-Dependencies
-============
-  * pw_dumb_io facade
diff --git a/pw_log_basic/BUILD b/pw_log_basic/BUILD
index fd9105d..ad7ac07 100644
--- a/pw_log_basic/BUILD
+++ b/pw_log_basic/BUILD
@@ -35,8 +35,8 @@
         "public_overrides",
     ],
     deps = [
-        "//pw_dumb_io",
         "//pw_log:facade",
         "//pw_string",
+        "//pw_sys_io",
     ],
 )
diff --git a/pw_log_basic/BUILD.gn b/pw_log_basic/BUILD.gn
index 2b895ac..0efa82d 100644
--- a/pw_log_basic/BUILD.gn
+++ b/pw_log_basic/BUILD.gn
@@ -35,10 +35,10 @@
 source_set("pw_log_basic_core") {
   public_configs = [ ":default_config" ]
   deps = [
-    "$dir_pw_dumb_io",
     "$dir_pw_log:facade",
     "$dir_pw_preprocessor",
     "$dir_pw_string",
+    "$dir_pw_sys_io",
   ]
   public = [ "public/pw_log_basic/log_basic.h" ]
   sources = public + [ "log_basic.cc" ]
diff --git a/pw_log_basic/CMakeLists.txt b/pw_log_basic/CMakeLists.txt
index c85276d..5c66fe0 100644
--- a/pw_log_basic/CMakeLists.txt
+++ b/pw_log_basic/CMakeLists.txt
@@ -16,8 +16,8 @@
   IMPLEMENTS_FACADE
     pw_log
   PRIVATE_DEPS
-    pw_dumb_io
     pw_string
+    pw_sys_io
 )
 
 target_include_directories(pw_log_basic PUBLIC public_overrides)
diff --git a/pw_log_basic/log_basic.cc b/pw_log_basic/log_basic.cc
index c586830..e67d6d1 100644
--- a/pw_log_basic/log_basic.cc
+++ b/pw_log_basic/log_basic.cc
@@ -18,9 +18,9 @@
 
 #include <cstring>
 
-#include "pw_dumb_io/dumb_io.h"
 #include "pw_log/levels.h"
 #include "pw_string/string_builder.h"
+#include "pw_sys_io/sys_io.h"
 
 // ANSI color constants to control the terminal. Not Windows compatible.
 // clang-format off
@@ -148,5 +148,5 @@
   va_end(args);
 
   // All done; flush the log.
-  pw::dumb_io::WriteLine(buffer.view());
+  pw::sys_io::WriteLine(buffer.view());
 }
diff --git a/pw_dumb_io/BUILD b/pw_sys_io/BUILD
similarity index 87%
rename from pw_dumb_io/BUILD
rename to pw_sys_io/BUILD
index a25a845..11e8201 100644
--- a/pw_dumb_io/BUILD
+++ b/pw_sys_io/BUILD
@@ -23,7 +23,7 @@
 
 pw_cc_library(
     name = "facade",
-    hdrs = ["public/pw_dumb_io/dumb_io.h"],
+    hdrs = ["public/pw_sys_io/sys_io.h"],
     includes = ["public"],
     deps = [
         "//pw_span",
@@ -33,7 +33,7 @@
 
 pw_cc_library(
     name = "default_putget_bytes",
-    srcs = ["dumb_io.cc"],
+    srcs = ["sys_io.cc"],
     deps = [
         ":facade",
         "//pw_span",
@@ -42,14 +42,14 @@
 )
 
 pw_cc_library(
-    name = "pw_dumb_io",
-    hdrs = ["public/pw_dumb_io/dumb_io.h"],
+    name = "pw_sys_io",
+    hdrs = ["public/pw_sys_io/sys_io.h"],
     deps = [
         ":facade",
-        # For now, hard-code to depend on stdio until bazel build is updated
-        # to support multiple target configurations.
-        "//pw_dumb_io_stdio",
         "//pw_span",
         "//pw_status",
+        # For now, hard-code to depend on stdio until bazel build is updated
+        # to support multiple target configurations.
+        "//pw_sys_io_stdio",
     ],
 )
diff --git a/pw_dumb_io/BUILD.gn b/pw_sys_io/BUILD.gn
similarity index 87%
rename from pw_dumb_io/BUILD.gn
rename to pw_sys_io/BUILD.gn
index b451afa..0c48cf65d 100644
--- a/pw_dumb_io/BUILD.gn
+++ b/pw_sys_io/BUILD.gn
@@ -19,19 +19,19 @@
   include_dirs = [ "public" ]
 }
 
-pw_facade("pw_dumb_io") {
-  backend = dir_pw_dumb_io_backend
+pw_facade("pw_sys_io") {
+  backend = dir_pw_sys_io_backend
   public_configs = [ ":default_config" ]
   public_deps = [
     "$dir_pw_span",
     "$dir_pw_status",
   ]
-  public = [ "public/pw_dumb_io/dumb_io.h" ]
+  public = [ "public/pw_sys_io/sys_io.h" ]
 }
 
 source_set("default_putget_bytes") {
   deps = [ ":facade" ]
-  sources = [ "dumb_io.cc" ]
+  sources = [ "sys_io.cc" ]
 }
 
 pw_doc_group("docs") {
diff --git a/pw_dumb_io/CMakeLists.txt b/pw_sys_io/CMakeLists.txt
similarity index 93%
rename from pw_dumb_io/CMakeLists.txt
rename to pw_sys_io/CMakeLists.txt
index 1828904..7ca3860 100644
--- a/pw_dumb_io/CMakeLists.txt
+++ b/pw_sys_io/CMakeLists.txt
@@ -12,9 +12,9 @@
 # License for the specific language governing permissions and limitations under
 # the License.
 
-pw_add_facade(pw_dumb_io
+pw_add_facade(pw_sys_io
   SOURCES
-    dumb_io.cc
+    sys_io.cc
   PUBLIC_DEPS
     pw_span
     pw_status
diff --git a/pw_dumb_io/docs.rst b/pw_sys_io/docs.rst
similarity index 79%
rename from pw_dumb_io/docs.rst
rename to pw_sys_io/docs.rst
index a431f20..38b5ef7 100644
--- a/pw_dumb_io/docs.rst
+++ b/pw_sys_io/docs.rst
@@ -1,12 +1,12 @@
-.. _chapter-pw-dumb-io:
+.. _chapter-pw-sys-io:
 
 .. default-domain:: cpp
 
 .. highlight:: sh
 
-----------
-pw_dumb_io
-----------
+---------
+pw_sys_io
+---------
 This module defines a simple and unoptimized interface for byte-by-byte
 input/output. This can be done over a logging system, stdio, UART, via a
 photodiode and modulated kazoo, or basically any way to get data in and out
@@ -34,16 +34,17 @@
 =====
 This module requires relatively minimal setup:
 
-  1. Chose a ``pw_dumb_io`` backend, or write one yourself.
-  2. If using GN build, Specify the ``dir_pw_dumb_io_backend`` GN global
-     variable to point to your ``pw_dumb_io`` backend.
+  1. Chose a ``pw_sys_io`` backend, or write one yourself.
+  2. If using GN build, Specify the ``dir_pw_sys_io_backend`` GN global
+     variable to point to your ``pw_sys_io`` backend.
 
 Module usage
 ============
-See backend docs for how to interact with the underlying dumb io implementation.
+See backend docs for how to interact with the underlying system I/O
+implementation.
 
 Dependencies
 ============
-  * pw_dumb_io_backend
+  * pw_sys_io_backend
   * pw_span
   * pw_status
diff --git a/pw_dumb_io/public/pw_dumb_io/dumb_io.h b/pw_sys_io/public/pw_sys_io/sys_io.h
similarity index 90%
rename from pw_dumb_io/public/pw_dumb_io/dumb_io.h
rename to pw_sys_io/public/pw_sys_io/sys_io.h
index 8f7ce70..3010de1 100644
--- a/pw_dumb_io/public/pw_dumb_io/dumb_io.h
+++ b/pw_sys_io/public/pw_sys_io/sys_io.h
@@ -43,30 +43,30 @@
 #include "pw_status/status.h"
 #include "pw_status/status_with_size.h"
 
-namespace pw::dumb_io {
+namespace pw::sys_io {
 
-// Read a single byte from the dumb io backend.
+// Read a single byte from the sys io backend.
 // Implemented by: Backend
 //
 // This function will block until it either succeeds or fails to read a byte
-// from the pw_dumb_io backend.
+// from the pw_sys_io backend.
 //
 // Returns Status::OK if a byte was successfully read.
 Status ReadByte(std::byte* dest);
 
-// Write a single byte out the dumb io backend.
+// Write a single byte out the sys io backend.
 // Implemented by: Backend
 //
 // This function will block until it either succeeds or fails to write a byte
-// out the pw_dumb_io backend.
+// out the pw_sys_io backend.
 //
 // Returns Status::OK if a byte was successfully read.
 Status WriteByte(std::byte b);
 
-// Write a string out the dumb io backend.
+// Write a string out the sys io backend.
 // Implemented by: Backend
 //
-// This function takes a null-terminated string and writes it out the dumb io
+// This function takes a null-terminated string and writes it out the sys io
 // backend, adding any platform-specific newline character(s) (these are
 // accounted for in the returned StatusWithSize).
 //
@@ -75,7 +75,7 @@
 // are returned as part of the StatusWithSize.
 StatusWithSize WriteLine(const std::string_view& s);
 
-// Fill a byte span from the dumb io backend using ReadByte().
+// Fill a byte span from the sys io backend using ReadByte().
 // Implemented by: Facade
 //
 // This function is implemented by this facade and simply uses ReadByte() to
@@ -89,7 +89,7 @@
 // are returned as part of the StatusWithSize.
 StatusWithSize ReadBytes(span<std::byte> dest);
 
-// Write span of bytes out the dumb io backend using WriteByte().
+// Write span of bytes out the sys io backend using WriteByte().
 // Implemented by: Facade
 //
 // This function is implemented by this facade and simply writes the source
@@ -103,4 +103,4 @@
 // are returned as part of the StatusWithSize.
 StatusWithSize WriteBytes(span<const std::byte> src);
 
-}  // namespace pw::dumb_io
+}  // namespace pw::sys_io
diff --git a/pw_dumb_io/dumb_io.cc b/pw_sys_io/sys_io.cc
similarity index 92%
rename from pw_dumb_io/dumb_io.cc
rename to pw_sys_io/sys_io.cc
index 26b9f62..ed0ab5c 100644
--- a/pw_dumb_io/dumb_io.cc
+++ b/pw_sys_io/sys_io.cc
@@ -12,9 +12,9 @@
 // License for the specific language governing permissions and limitations under
 // the License.
 
-#include "pw_dumb_io/dumb_io.h"
+#include "pw_sys_io/sys_io.h"
 
-namespace pw::dumb_io {
+namespace pw::sys_io {
 
 StatusWithSize ReadBytes(span<std::byte> dest) {
   for (size_t i = 0; i < dest.size_bytes(); ++i) {
@@ -36,4 +36,4 @@
   return StatusWithSize(src.size_bytes());
 }
 
-}  // namespace pw::dumb_io
+}  // namespace pw::sys_io
diff --git a/pw_dumb_io_baremetal_stm32f429/BUILD b/pw_sys_io_baremetal_stm32f429/BUILD
similarity index 90%
rename from pw_dumb_io_baremetal_stm32f429/BUILD
rename to pw_sys_io_baremetal_stm32f429/BUILD
index 595b3c4..42f5c32 100644
--- a/pw_dumb_io_baremetal_stm32f429/BUILD
+++ b/pw_sys_io_baremetal_stm32f429/BUILD
@@ -17,8 +17,8 @@
 licenses(["notice"])  # Apache License 2.0
 
 filegroup(
-    name = "pw_dumb_io_baremetal_stm32f429",
+    name = "pw_sys_io_baremetal_stm32f429",
     srcs = [
-        "dumb_io_baremetal.cc",
+        "sys_io_baremetal.cc",
     ],
 )
diff --git a/pw_dumb_io_baremetal_stm32f429/BUILD.gn b/pw_sys_io_baremetal_stm32f429/BUILD.gn
similarity index 78%
rename from pw_dumb_io_baremetal_stm32f429/BUILD.gn
rename to pw_sys_io_baremetal_stm32f429/BUILD.gn
index bdd2aed..5bff1c2 100644
--- a/pw_dumb_io_baremetal_stm32f429/BUILD.gn
+++ b/pw_sys_io_baremetal_stm32f429/BUILD.gn
@@ -16,15 +16,15 @@
 
 # This if statement allows docs to always build even if the target isn't
 # compatible with this backend.
-if (dir_pw_dumb_io_backend == dir_pw_dumb_io_baremetal_stm32f429) {
-  source_set("pw_dumb_io_baremetal_stm32f429") {
+if (dir_pw_sys_io_backend == dir_pw_sys_io_baremetal_stm32f429) {
+  source_set("pw_sys_io_baremetal_stm32f429") {
     public_deps = [ "$dir_pw_boot_armv7m" ]
     deps = [
-      "$dir_pw_dumb_io:default_putget_bytes",
-      "$dir_pw_dumb_io:facade",
       "$dir_pw_preprocessor",
+      "$dir_pw_sys_io:default_putget_bytes",
+      "$dir_pw_sys_io:facade",
     ]
-    sources = [ "dumb_io_baremetal.cc" ]
+    sources = [ "sys_io_baremetal.cc" ]
   }
 }
 
diff --git a/pw_dumb_io_baremetal_stm32f429/docs.rst b/pw_sys_io_baremetal_stm32f429/docs.rst
similarity index 76%
rename from pw_dumb_io_baremetal_stm32f429/docs.rst
rename to pw_sys_io_baremetal_stm32f429/docs.rst
index b47b88c..934deca 100644
--- a/pw_dumb_io_baremetal_stm32f429/docs.rst
+++ b/pw_sys_io_baremetal_stm32f429/docs.rst
@@ -1,18 +1,18 @@
-.. _chapter-pw-dumb-io-baremetal-stm32f429:
+.. _chapter-pw-sys-io-baremetal-stm32f429:
 
 .. default-domain:: cpp
 
 .. highlight:: sh
 
-------------------------------
-pw_dumb_io_baremetal_stm32f429
-------------------------------
+-----------------------------
+pw_sys_io_baremetal_stm32f429
+-----------------------------
 
-``pw_dumb_io_baremetal_stm32f429`` implements the ``pw_dumb_io`` facade over
+``pw_sys_io_baremetal_stm32f429`` implements the ``pw_sys_io`` facade over
 UART.
 
-The STM32F429 baremetal dumb IO backend provides device startup code and a UART
-driver layer that allows applications built against the ``pw_dumb_io`` interface
+The STM32F429 baremetal sys IO backend provides device startup code and a UART
+driver layer that allows applications built against the ``pw_sys_io`` interface
 to run on a STM32F429 chip and do simple input/output via UART. The code is
 optimized for the STM32F429I-DISC1, using USART1 (which is connected to the
 virtual COM port on the embedded ST-LINKv2 chip). However, this should work with
@@ -25,8 +25,8 @@
 =====
 This module requires relatively minimal setup:
 
-  1. Write code against the ``pw_dumb_io`` facade.
-  2. Specify the ``dir_pw_dumb_io_backend`` GN global variable to point to this
+  1. Write code against the ``pw_sys_io`` facade.
+  2. Specify the ``dir_pw_sys_io_backend`` GN global variable to point to this
      backend.
   3. Build an executable with a main() function using a toolchain that
      supports Cortex-M4.
@@ -61,5 +61,5 @@
 
 Dependencies
 ============
-  * pw_dumb_io facade
+  * pw_sys_io facade
   * pw_preprocessor module
diff --git a/pw_dumb_io_baremetal_stm32f429/dumb_io_baremetal.cc b/pw_sys_io_baremetal_stm32f429/sys_io_baremetal.cc
similarity index 97%
rename from pw_dumb_io_baremetal_stm32f429/dumb_io_baremetal.cc
rename to pw_sys_io_baremetal_stm32f429/sys_io_baremetal.cc
index 1810d28..3b7415a 100644
--- a/pw_dumb_io_baremetal_stm32f429/dumb_io_baremetal.cc
+++ b/pw_sys_io_baremetal_stm32f429/sys_io_baremetal.cc
@@ -15,8 +15,8 @@
 #include <cinttypes>
 
 #include "pw_boot_armv7m/boot.h"
-#include "pw_dumb_io/dumb_io.h"
 #include "pw_preprocessor/compiler.h"
+#include "pw_sys_io/sys_io.h"
 
 namespace {
 
@@ -217,7 +217,7 @@
 #endif  // defined(PW_ARMV7M_ENABLE_FPU) && PW_ARMV7M_ENABLE_FPU == 1
 }
 
-namespace pw::dumb_io {
+namespace pw::sys_io {
 
 // Wait for a byte to read on USART1. This blocks until a byte is read. This is
 // extremely inefficient as it requires the target to burn CPU cycles polling to
@@ -244,7 +244,7 @@
   return Status::OK;
 }
 
-// Writes a string using pw::dumb_io, and add newline characters at the end.
+// Writes a string using pw::sys_io, and add newline characters at the end.
 StatusWithSize WriteLine(const std::string_view& s) {
   size_t chars_written = 0;
   StatusWithSize result = WriteBytes(as_bytes(span(s)));
@@ -260,4 +260,4 @@
   return StatusWithSize(result.status(), chars_written);
 }
 
-}  // namespace pw::dumb_io
+}  // namespace pw::sys_io
diff --git a/pw_dumb_io_stdio/BUILD b/pw_sys_io_stdio/BUILD
similarity index 85%
rename from pw_dumb_io_stdio/BUILD
rename to pw_sys_io_stdio/BUILD
index 0f8da67..333bd54 100644
--- a/pw_dumb_io_stdio/BUILD
+++ b/pw_sys_io_stdio/BUILD
@@ -22,10 +22,10 @@
 licenses(["notice"])  # Apache License 2.0
 
 pw_cc_library(
-    name = "pw_dumb_io_stdio",
-    srcs = ["dumb_io.cc"],
+    name = "pw_sys_io_stdio",
+    srcs = ["sys_io.cc"],
     deps = [
-        "//pw_dumb_io:default_putget_bytes",
-        "//pw_dumb_io:facade",
+        "//pw_sys_io:default_putget_bytes",
+        "//pw_sys_io:facade",
     ],
 )
diff --git a/pw_dumb_io_stdio/BUILD.gn b/pw_sys_io_stdio/BUILD.gn
similarity index 80%
rename from pw_dumb_io_stdio/BUILD.gn
rename to pw_sys_io_stdio/BUILD.gn
index 82e4c78..a683ab9 100644
--- a/pw_dumb_io_stdio/BUILD.gn
+++ b/pw_sys_io_stdio/BUILD.gn
@@ -16,13 +16,13 @@
 
 # This if statement allows docs to always build even if the target isn't
 # compatible with this backend.
-if (dir_pw_dumb_io_backend == dir_pw_dumb_io_stdio) {
-  source_set("pw_dumb_io_stdio") {
+if (dir_pw_sys_io_backend == dir_pw_sys_io_stdio) {
+  source_set("pw_sys_io_stdio") {
     deps = [
-      "$dir_pw_dumb_io:default_putget_bytes",
-      "$dir_pw_dumb_io:facade",
+      "$dir_pw_sys_io:default_putget_bytes",
+      "$dir_pw_sys_io:facade",
     ]
-    sources = [ "dumb_io.cc" ]
+    sources = [ "sys_io.cc" ]
   }
 }
 
diff --git a/pw_dumb_io_stdio/CMakeLists.txt b/pw_sys_io_stdio/CMakeLists.txt
similarity index 71%
rename from pw_dumb_io_stdio/CMakeLists.txt
rename to pw_sys_io_stdio/CMakeLists.txt
index 696b0a7..5b76f64 100644
--- a/pw_dumb_io_stdio/CMakeLists.txt
+++ b/pw_sys_io_stdio/CMakeLists.txt
@@ -12,11 +12,11 @@
 # License for the specific language governing permissions and limitations under
 # the License.
 
-pw_auto_add_simple_module(pw_dumb_io_stdio
+pw_auto_add_simple_module(pw_sys_io_stdio
   IMPLEMENTS_FACADE
-    pw_dumb_io
+    pw_sys_io
 )
 
-# TODO(hepler): Declare pw_dumb_io_stdio as the pw_dumb_io backend for now.
-add_library(pw_dumb_io.backend INTERFACE)
-target_link_libraries(pw_dumb_io.backend INTERFACE pw_dumb_io_stdio)
+# TODO(hepler): Declare pw_sys_io_stdio as the pw_sys_io backend for now.
+add_library(pw_sys_io.backend INTERFACE)
+target_link_libraries(pw_sys_io.backend INTERFACE pw_sys_io_stdio)
diff --git a/pw_sys_io_stdio/docs.rst b/pw_sys_io_stdio/docs.rst
new file mode 100644
index 0000000..553efbf
--- /dev/null
+++ b/pw_sys_io_stdio/docs.rst
@@ -0,0 +1,39 @@
+.. _chapter-pw-sys-io-stdio:
+
+.. default-domain:: cpp
+
+.. highlight:: sh
+
+---------------
+pw_sys_io_stdio
+---------------
+The ``pw_sys_io_stdio`` backend implements the ``pw_sys_io`` facade using
+stdio.
+
+Why not just use stdio directly?
+--------------------------------
+
+The nice thing about using ``pw_sys_io`` is that it's rather easy to get a
+board up and running with a target-specific backend. This means when drafting
+out a quick application you can write it against ``pw_sys_io`` and, with some
+care, the application will be able to run on both host and target devices.
+
+While it's not recommended to use ``pw_sys_io`` for any production
+applications, it can be rather helpful for early prototyping.
+
+Setup
+=====
+This module requires relatively minimal setup:
+
+  1. Write code against the ``pw_sys_io`` facade.
+  2. Specify the ``dir_pw_sys_io_backend`` GN global variable to point to this
+     backend.
+
+Module usage
+============
+For the most part, applications built with this backend will behave similarly
+to an application built directly against stdio.
+
+Dependencies
+============
+  * pw_sys_io facade
diff --git a/pw_dumb_io_stdio/dumb_io.cc b/pw_sys_io_stdio/sys_io.cc
similarity index 94%
rename from pw_dumb_io_stdio/dumb_io.cc
rename to pw_sys_io_stdio/sys_io.cc
index 66a1f45..72e4df6 100644
--- a/pw_dumb_io_stdio/dumb_io.cc
+++ b/pw_sys_io_stdio/sys_io.cc
@@ -12,11 +12,11 @@
 // License for the specific language governing permissions and limitations under
 // the License.
 
-#include "pw_dumb_io/dumb_io.h"
+#include "pw_sys_io/sys_io.h"
 
 #include <cstdio>
 
-namespace pw::dumb_io {
+namespace pw::sys_io {
 
 Status ReadByte(std::byte* dest) {
   if (dest == nullptr) {
@@ -55,4 +55,4 @@
   return StatusWithSize(result, chars_written);
 }
 
-}  // namespace pw::dumb_io
+}  // namespace pw::sys_io
diff --git a/pw_unit_test/BUILD b/pw_unit_test/BUILD
index c4d51f4..053653c 100644
--- a/pw_unit_test/BUILD
+++ b/pw_unit_test/BUILD
@@ -81,7 +81,7 @@
     deps = [
         ":pw_unit_test",
         ":simple_printing_event_handler",
-        "//pw_dumb_io",
+        "//pw_sys_io",
     ],
 )
 
diff --git a/pw_unit_test/BUILD.gn b/pw_unit_test/BUILD.gn
index 0906df2..4283c14 100644
--- a/pw_unit_test/BUILD.gn
+++ b/pw_unit_test/BUILD.gn
@@ -55,7 +55,7 @@
   public_deps = [ ":pw_unit_test" ]
   deps = [
     ":simple_printing_event_handler",
-    "$dir_pw_dumb_io",
+    "$dir_pw_sys_io",
   ]
   sources = [ "simple_printing_main.cc" ]
 }
@@ -76,7 +76,7 @@
     public_deps = [ ":pw_unit_test" ]
     deps = [
       ":logging_event_handler",
-      "$dir_pw_dumb_io",
+      "$dir_pw_sys_io",
     ]
     sources = [ "logging_main.cc" ]
   }
diff --git a/pw_unit_test/CMakeLists.txt b/pw_unit_test/CMakeLists.txt
index 7a7e262..3767b4e 100644
--- a/pw_unit_test/CMakeLists.txt
+++ b/pw_unit_test/CMakeLists.txt
@@ -32,6 +32,6 @@
     pw_unit_test
   PRIVATE_DEPS
     pw_preprocessor
-    pw_dumb_io
     pw_string
+    pw_sys_io
 )
diff --git a/pw_unit_test/simple_printing_main.cc b/pw_unit_test/simple_printing_main.cc
index 96fb4db..859f5f8 100644
--- a/pw_unit_test/simple_printing_main.cc
+++ b/pw_unit_test/simple_printing_main.cc
@@ -14,8 +14,8 @@
 
 #include <string_view>
 
-#include "pw_dumb_io/dumb_io.h"
 #include "pw_span/span.h"
+#include "pw_sys_io/sys_io.h"
 #include "pw_unit_test/framework.h"
 #include "pw_unit_test/simple_printing_event_handler.h"
 
@@ -23,9 +23,9 @@
   pw::unit_test::SimplePrintingEventHandler handler(
       [](const std::string_view& s, bool append_newline) {
         if (append_newline) {
-          pw::dumb_io::WriteLine(s);
+          pw::sys_io::WriteLine(s);
         } else {
-          pw::dumb_io::WriteBytes(pw::as_bytes(pw::span(s)));
+          pw::sys_io::WriteBytes(pw::as_bytes(pw::span(s)));
         }
       });
 
diff --git a/pw_vars_default.gni b/pw_vars_default.gni
index b7c9ae4..6de484f 100644
--- a/pw_vars_default.gni
+++ b/pw_vars_default.gni
@@ -103,12 +103,12 @@
 # Backend for the pw_cpu_exception module.
 dir_pw_cpu_exception_backend = ""
 
-# Backend for the pw_dumb_io module.
-dir_pw_dumb_io_backend = ""
-
 # Backend for the pw_log module.
 dir_pw_log_backend = ""
 
+# Backend for the pw_sys_io module.
+dir_pw_sys_io_backend = ""
+
 ############################## MODULE CONFIGS ##################################
 
 # Module configuration options for pw_boot_armv7m.
diff --git a/targets/host/host_common.gni b/targets/host/host_common.gni
index 4a890c3..bfe5db2 100644
--- a/targets/host/host_common.gni
+++ b/targets/host/host_common.gni
@@ -24,8 +24,8 @@
 # Configure backend for assert facade.
 dir_pw_assert_backend = "$dir_pw_assert_basic"
 
-# Configure backend for pw_dumb_io facade.
-dir_pw_dumb_io_backend = "$dir_pw_dumb_io_stdio"
-
 # Configure backend for logging facade.
 dir_pw_log_backend = "$dir_pw_log_basic"
+
+# Configure backend for pw_sys_io facade.
+dir_pw_sys_io_backend = "$dir_pw_sys_io_stdio"
diff --git a/targets/stm32f429i-disc1/target_config.gni b/targets/stm32f429i-disc1/target_config.gni
index 0e589b1..582f18d 100644
--- a/targets/stm32f429i-disc1/target_config.gni
+++ b/targets/stm32f429i-disc1/target_config.gni
@@ -15,7 +15,7 @@
 # Target configuration for the STM32f429I-DISC1 development board.
 #
 # TODO(amontanez): This target configuration treats
-# pw_dumb_io_baremetal_stm32f429 as if it were a platform. This is for
+# pw_sys_io_baremetal_stm32f429 as if it were a platform. This is for
 # testing/development and should eventually point to something more
 # sophisticated.
 
@@ -44,7 +44,7 @@
     if (!defined(deps)) {
       deps = []
     }
-    deps += [ dir_pw_dumb_io_baremetal_stm32f429 ]
+    deps += [ dir_pw_sys_io_baremetal_stm32f429 ]
   }
 }
 
@@ -64,8 +64,8 @@
 dir_pw_assert_backend = dir_pw_assert_basic
 dir_pw_boot_backend = dir_pw_boot_armv7m
 dir_pw_cpu_exception_backend = dir_pw_cpu_exception_armv7m
-dir_pw_dumb_io_backend = dir_pw_dumb_io_baremetal_stm32f429
 dir_pw_log_backend = dir_pw_log_basic
+dir_pw_sys_io_backend = dir_pw_sys_io_baremetal_stm32f429
 
 pw_boot_armv7m_config.defines += [
   "PW_BOOT_FLASH_BEGIN=0x08000200",