diff --git a/app/app.c b/app/app.c
new file mode 100644
index 0000000..c80f097
--- /dev/null
+++ b/app/app.c
@@ -0,0 +1,63 @@
+/*
+ * Copyright (c) 2009 Travis Geiselbrecht
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files
+ * (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+#include <debug.h>
+#include <app.h>
+#include <kernel/thread.h>
+
+extern const struct _app_descriptor __apps_start;
+extern const struct _app_descriptor __apps_end;
+
+static void start_app(const struct _app_descriptor *app);
+
+/* one time setup */
+void apps_init(void)
+{
+	const struct _app_descriptor *app;
+	for (app = &__apps_start; app != &__apps_end; app++) {
+//		printf("app '%s'\n", app->name);
+
+		if (app->entry && app->flags & APP_FLAG_BOOT_START) {
+			start_app(app);
+		}
+	}
+}
+
+static int app_thread_entry(void *arg)
+{
+	const struct _app_descriptor *app = (const struct _app_descriptor *)arg;
+
+	app->entry(app, NULL);
+
+	return 0;
+}
+
+static void start_app(const struct _app_descriptor *app)
+{
+	printf("starting app %s\n", app->name);
+	if (app->flags & APP_FLAG_THREAD) {
+		thread_resume(thread_create(app->name, &app_thread_entry, (void *)app, DEFAULT_PRIORITY, DEFAULT_STACK_SIZE));
+	} else {
+		app->entry(app, NULL);
+	}
+}
+
