diff --git a/internal/sys.cpp b/internal/sys.cpp
new file mode 100644
index 0000000..2aec78b
--- /dev/null
+++ b/internal/sys.cpp
@@ -0,0 +1,45 @@
+/*
+ * Copyright 2018 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "sys.hpp"
+
+#include <dlfcn.h>
+
+namespace blobs
+{
+
+namespace internal
+{
+
+const char* DlSysImpl::dlerror() const
+{
+    return ::dlerror();
+}
+
+void* DlSysImpl::dlopen(const char* filename, int flags) const
+{
+    return ::dlopen(filename, flags);
+}
+
+void* DlSysImpl::dlsym(void* handle, const char* symbol) const
+{
+    return ::dlsym(handle, symbol);
+}
+
+DlSysImpl dlsys_impl;
+
+} // namespace internal
+} // namespace blobs
diff --git a/internal/sys.hpp b/internal/sys.hpp
new file mode 100644
index 0000000..e0a02bf
--- /dev/null
+++ b/internal/sys.hpp
@@ -0,0 +1,54 @@
+#pragma once
+
+namespace blobs
+{
+
+namespace internal
+{
+/**
+ * Interface to the dynamic library loader.
+ */
+class DlSysInterface
+{
+  public:
+    virtual ~DlSysInterface() = default;
+
+    /**
+     * obtain error diagnostic for functions in the dlopen API
+     *
+     * @return the error details
+     */
+    virtual const char* dlerror() const = 0;
+
+    /**
+     * open a shared object
+     *
+     * @param[in] filename - the path to the shared object or the filename to
+     * for searching
+     * @param[in] flags - the flags
+     * @return a handle to the shared object (null on failure)
+     */
+    virtual void* dlopen(const char* filename, int flags) const = 0;
+
+    /**
+     * obtain address of a symbol in a shared object or executable
+     *
+     * @param[in] handle - pointer to shared object
+     * @param[in] symbol - name of the symbol to find
+     * @return the address of the symbol if found (null otherwise)
+     */
+    virtual void* dlsym(void* handle, const char* symbol) const = 0;
+};
+
+class DlSysImpl : public DlSysInterface
+{
+  public:
+    const char* dlerror() const override;
+    void* dlopen(const char* filename, int flags) const override;
+    void* dlsym(void* handle, const char* symbol) const override;
+};
+
+extern DlSysImpl dlsys_impl;
+
+} // namespace internal
+} // namespace blobs
