diff --git a/Knot.files b/Knot.files
index 222900e458b2da1b34f74b220d33177e68e35df1..7157f4c36ad5ca986846ef945e121c884fc763e2 100644
--- a/Knot.files
+++ b/Knot.files
@@ -499,8 +499,6 @@ src/utils/kxdpgun/ip_route.h
 src/utils/kxdpgun/load_queries.c
 src/utils/kxdpgun/load_queries.h
 src/utils/kxdpgun/main.c
-src/utils/kxdpgun/popenve.c
-src/utils/kxdpgun/popenve.h
 src/utils/kzonecheck/main.c
 src/utils/kzonecheck/zone_check.c
 src/utils/kzonecheck/zone_check.h
diff --git a/src/utils/Makefile.inc b/src/utils/Makefile.inc
index 67f331cc52ac0ba490bac8c2445fcac11c6152c1..5241536f2b54800844a8ecced2243f2e54946829 100644
--- a/src/utils/Makefile.inc
+++ b/src/utils/Makefile.inc
@@ -90,9 +90,7 @@ kxdpgun_SOURCES = \
 	utils/kxdpgun/ip_route.h		\
 	utils/kxdpgun/load_queries.c		\
 	utils/kxdpgun/load_queries.h		\
-	utils/kxdpgun/main.c			\
-	utils/kxdpgun/popenve.c			\
-	utils/kxdpgun/popenve.h
+	utils/kxdpgun/main.c
 
 kxdpgun_CPPFLAGS  = $(AM_CPPFLAGS)
 kxdpgun_LDADD     = libcontrib.la libknot.la $(pthread_LIBS) $(cap_ng_LIBS) $(libmnl_LIBS)
diff --git a/src/utils/kxdpgun/popenve.c b/src/utils/kxdpgun/popenve.c
deleted file mode 100644
index 116a2c2f9349507162149a09425d959e6948906f..0000000000000000000000000000000000000000
--- a/src/utils/kxdpgun/popenve.c
+++ /dev/null
@@ -1,101 +0,0 @@
-/*  Copyright (C) 2020 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <https://www.gnu.org/licenses/>.
- */
-
-#include <errno.h>
-#include <fcntl.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-#include "utils/kxdpgun/popenve.h"
-
-#ifdef ENABLE_CAP_NG
-#include <cap-ng.h>
-
-static void drop_capabilities(void)
-{
-	/* Drop all capabilities. */
-	if (capng_have_capability(CAPNG_EFFECTIVE, CAP_SETPCAP)) {
-		capng_clear(CAPNG_SELECT_BOTH);
-		capng_apply(CAPNG_SELECT_BOTH);
-	}
-}
-#else /* ENABLE_CAP_NG */
-static void drop_capabilities(void) {  }
-#endif
-
-int kpopenvef(const char *binfile, char *const args[], char *const env[], bool drop_cap)
-{
-	int pipefds[2];
-	if (pipe(pipefds) < 0) {
-		return -errno;
-	}
-	if (fcntl(pipefds[0], F_SETFD, FD_CLOEXEC) < 0) {
-		int fcntlerrno = errno;
-		close(pipefds[0]);
-		close(pipefds[1]);
-		return -fcntlerrno;
-	}
-
-	pid_t forkpid = fork();
-	if (forkpid < 0) {
-		int forkerrno = errno;
-		close(pipefds[0]);
-		close(pipefds[1]);
-		return -forkerrno;
-	}
-
-	if (forkpid == 0) {
-dup_stdout:
-		if (dup2(pipefds[1], STDOUT_FILENO) < 0) {
-			if (errno == EINTR) {
-				goto dup_stdout;
-			}
-			perror("dup_stdout");
-			close(pipefds[0]);
-			close(pipefds[1]);
-			exit(EXIT_FAILURE);
-		}
-		close(pipefds[1]);
-
-		if (drop_cap) {
-			drop_capabilities();
-		}
-
-		execve(binfile, args, env);
-		perror("execve");
-		exit(EXIT_FAILURE);
-	}
-
-	close(pipefds[1]);
-	return pipefds[0];
-}
-
-FILE *kpopenve(const char *binfile, char *const args[], char *const env[], bool drop_cap)
-{
-	int p = kpopenvef(binfile, args, env, drop_cap);
-	if (p < 0) {
-		errno = -p;
-		return NULL;
-	}
-
-	FILE *res = fdopen(p, "r");
-	if (res == NULL) {
-		int fdoerrno = errno;
-		close(p);
-		errno = fdoerrno;
-	}
-	return res;
-}
diff --git a/src/utils/kxdpgun/popenve.h b/src/utils/kxdpgun/popenve.h
deleted file mode 100644
index feb84145327589f86a3c900bdee7b7866261ee04..0000000000000000000000000000000000000000
--- a/src/utils/kxdpgun/popenve.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/*  Copyright (C) 2020 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <https://www.gnu.org/licenses/>.
- */
-
-#pragma once
-
-#include <stdbool.h>
-#include <stdio.h>
-
-/*!
- * \brief Hybrid of popen() and execve() returning a file descriptor
- *
- * This function is a safer altervative to popen(), it is the same to
- * popen() as execve() is to system().
- *
- * Warning: this function is designed to be as simple as possible,
- *          for reliable operation proper checking for transient
- *          error is needed.
- *
- * \param binfile   Executable file to be executed.
- * \param args      NULL-terminated arguments; first shall be the prog name!
- * \param env       NULL-terminated environment variables "key=value"
- * \param drop_cap  Drop capabilities for the subprocess.
- *
- * \retval < 0   Error occured, set to -errno.
- * \return > 0   File descriptor of the pipe reading end.
- */
-int kpopenvef(const char *binfile, char *const args[], char *const env[], bool drop_cap);
-
-/*!
- * \brief Variant of kpopenvef() returning FILE*
- *
- * Warning: the same warning as for kpopenvef() applies here too.
- *
- * \param binfile   Executable file to be executed.
- * \param args      NULL-terminated arguments; first shall be the prog name!
- * \param env       NULL-terminated environment variables "key=value"
- * \param drop_cap  Drop capabilities for the subprocess.
- *
- * \retval NULL   Error occured, see errno.
- * \return Pointer to open file descriptor.
- */
-FILE *kpopenve(const char *binfile, char *const args[], char *const env[], bool drop_cap);