diff --git a/README-dev.md b/README-dev.md
new file mode 100644
index 0000000..86f4c7b
--- /dev/null
+++ b/README-dev.md
@@ -0,0 +1,115 @@
+# Notes for ndn-tools Developers
+
+## Licensing Requirements
+
+Contributions to ndn-tools MUST be licensed under GPL 3.0 or a compatible license.  
+If you choose GPL 3.0, include the following license boilerplate into all C++ code files:
+
+    /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+    /**
+     * Copyright (c) [Year(s)],  [Copyright Holder(s)].
+     *
+     * This file is part of ndn-tools (Named Data Networking Essential Tools).
+     * See AUTHORS.md for complete list of ndn-tools authors and contributors.
+     *
+     * ndn-tools 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.
+     *
+     * ndn-tools 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
+     * ndn-tools, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
+     */
+
+## Directory Structure and Build Script
+
+All tools are placed in subdirectories under `tools/` directory.
+
+A tool can consist of one or more programs.
+For instance, a pair of consumer and producer programs that are designed to work together
+should be considered a single tool, not two separate tools.
+
+Each tool MUST have a `wscript` build script in its subdirectory.
+It will be invoked if this tool is selected for the build.
+It SHOULD compile the programs into `build/bin` directory (`target='../../bin/foo'`).
+
+### Shared Modules
+
+Modules shared among multiple tools SHOULD be placed in `core/` directory.
+They are available for use in all tools.
+
+A header in `core/` can be included in a tool like `#include "core/foo.hpp"`.
+
+`wscript` of a tool can link a program with modules in `core/` with `use='core-objects'`.
+
+### Documentation
+
+`README.md` in the subdirectory of a tool SHOULD give a brief description.
+
+Manual pages for each program SHOULD be written in reStructuredText format
+and placed in `manpages/` directory.
+
+## Code Guidelines
+
+C++ code SHOULD conform to
+[ndn-cxx code style](http://named-data.net/doc/ndn-cxx/current/code-style.html).
+
+### Namespace
+
+Types in each tool SHOULD be declared in a sub-namespace under `namespace ndn`.
+For example, a tool in `tools/foo` directory has namespace `ndn::foo`.  
+This allows the tool to reference ndn-cxx types with unqualified name lookup.
+This also prevents name conflicts between ndn-cxx and tools.
+
+Types in `core/` SHOULD be declared directly under `namespace ndn`,
+or in a sub-namespace if desired.
+
+`using namespace` SHOULD NOT be used except within block scope.
+
+### main Function
+
+The main function of a program SHOULD be declared within its sub-namespace.
+This allows it to reference types in ndn-cxx and the tool with unqualified name lookup.
+
+Then, another main function in global namespace needs to be defined
+to call the main function in sub-namespace.
+
+For example:
+
+    namespace ndn {
+    namespace foo {
+    
+    class Bar
+    {
+    public:
+      explicit
+      Bar(Face& face);
+      
+      void
+      run();
+    };
+    
+    int
+    main(int argc, char** argv)
+    {
+      Face face;
+      Bar program(face);
+      program.run();
+      return 0;
+    }
+    
+    }
+    
+    int
+    main(int argc, char** argv)
+    {
+      return ndn::foo::main(argc, argv);
+    }
+
+### Command Line Arguments
+
+[Boost.Program\_options](http://www.boost.org/doc/libs/1_48_0/doc/html/program_options.html) is
+preferred over getopt(3) for parsing command line arguments.
