diff --git a/repos/os/recipes/src/rom_block/content.mk b/repos/os/recipes/src/rom_block/content.mk
deleted file mode 100644
index 8f4e5568a6..0000000000
--- a/repos/os/recipes/src/rom_block/content.mk
+++ /dev/null
@@ -1,2 +0,0 @@
-SRC_DIR = src/server/rom_block
-include $(GENODE_DIR)/repos/base/recipes/src/content.inc
diff --git a/repos/os/recipes/src/rom_block/hash b/repos/os/recipes/src/rom_block/hash
deleted file mode 100644
index 7797d5f7a5..0000000000
--- a/repos/os/recipes/src/rom_block/hash
+++ /dev/null
@@ -1 +0,0 @@
-2020-05-26 a923cb61a0968e423fbe06d8a437641017edacc3
diff --git a/repos/os/recipes/src/rom_block/used_apis b/repos/os/recipes/src/rom_block/used_apis
deleted file mode 100644
index 1dc350cf5c..0000000000
--- a/repos/os/recipes/src/rom_block/used_apis
+++ /dev/null
@@ -1,3 +0,0 @@
-base
-os
-block_session
diff --git a/repos/os/src/server/rom_block/README b/repos/os/src/server/rom_block/README
deleted file mode 100644
index 739fed1714..0000000000
--- a/repos/os/src/server/rom_block/README
+++ /dev/null
@@ -1,6 +0,0 @@
-ROM loop device is an implementation of the block-session interface
-running as a client of a ROM session. It exports the requested ROM file as a
-block device, similiar to loop devices known in Linux. The example shows how
-to choose the right ROM file in its configuration and how to configure the exported block size.
-
-!
diff --git a/repos/os/src/server/rom_block/main.cc b/repos/os/src/server/rom_block/main.cc
deleted file mode 100644
index 97becc61c3..0000000000
--- a/repos/os/src/server/rom_block/main.cc
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * \brief Provide a rom-file as block device (aka loop devices)
- * \author Stefan Kalkowski
- * \date 2010-07-07
- */
-
-/*
- * Copyright (C) 2010-2017 Genode Labs GmbH
- *
- * This file is part of the Genode OS framework, which is distributed
- * under the terms of the GNU Affero General Public License version 3.
- */
-
-#include
-#include
-#include
-#include
-#include
-
-using namespace Genode;
-
-class Rom_block : public Block::Driver
-{
- private:
-
- Env &_env;
- Rom_connection _rom;
- size_t _blk_sz;
- Dataspace_capability _file_cap = _rom.dataspace();
- addr_t _file_addr = _env.rm().attach(_file_cap);
- size_t _file_sz = Dataspace_client(_file_cap).size();
- size_t _blk_cnt = _file_sz / _blk_sz;
-
- public:
-
- using String = Genode::String<64UL>;
-
- Rom_block(Env &env, String const &name, size_t blk_sz)
- : Block::Driver(env.ram()), _env(env), _rom(env, name.string()),
- _blk_sz(blk_sz) {}
-
-
- /****************************
- ** Block-driver interface **
- ****************************/
-
- Block::Session::Info info() const override
- {
- return { .block_size = _blk_sz,
- .block_count = _blk_cnt,
- .align_log2 = log2(_blk_sz),
- .writeable = false };
- }
-
- void read(Block::sector_t block_number,
- size_t block_count,
- char* buffer,
- Block::Packet_descriptor &packet) override
- {
- /* sanity check block number */
- if (block_number + block_count > _file_sz / _blk_sz) {
- warning("requested blocks ", block_number, "-",
- block_number + block_count, " out of range!");
- return;
- }
-
- size_t offset = (size_t) block_number * _blk_sz;
- size_t size = block_count * _blk_sz;
-
- /* copy file content to packet payload */
- memcpy((void*)buffer, (void*)(_file_addr + offset), size);
-
- ack_packet(packet);
- }
-};
-
-
-struct Main
-{
- Env &env;
- Heap heap { env.ram(), env.rm() };
-
- struct Factory : Block::Driver_factory
- {
- Env &env;
- Heap &heap;
-
- Factory(Env &env, Heap &heap)
- : env(env), heap(heap) {}
-
- Block::Driver *create() override
- {
- Attached_rom_dataspace config(env, "config");
-
- Rom_block::String const file =
- config.xml().attribute_value("file", Rom_block::String());
-
- size_t const blk_sz =
- config.xml().attribute_value("block_size", 512UL);
-
- log("using file=", file, " as device with block size ", blk_sz, ".");
-
- try {
- return new (&heap) Rom_block(env, file, blk_sz);
- }
- catch (Rom_connection::Rom_connection_failed) {
- error("cannot open file ", file); }
-
- throw Service_denied();
- }
-
- void destroy(Block::Driver *driver) override {
- Genode::destroy(&heap, driver); }
- } factory { env, heap };
-
- enum { WRITEABLE = false };
-
- Block::Root root { env.ep(), heap, env.rm(), factory, WRITEABLE };
-
- Main(Env &env) : env(env) {
- env.parent().announce(env.ep().manage(root)); }
-};
-
-
-void Component::construct(Genode::Env &env) { static Main server(env); }
diff --git a/repos/os/src/server/rom_block/target.mk b/repos/os/src/server/rom_block/target.mk
deleted file mode 100644
index 130fea3c4e..0000000000
--- a/repos/os/src/server/rom_block/target.mk
+++ /dev/null
@@ -1,3 +0,0 @@
-TARGET = rom_block
-SRC_CC = main.cc
-LIBS = base