Google Summer of Code 2019

NDN Project has been selected as an organization for Google Summer of Code 2019! GSoC page.

8th NDN Hackathon is next week (remote participation is allowed): http://8th-ndn-hackathon.named-data.net

Table of Contents

Introduction

Through Google Summer of Code (GSoC), Google provides an opportunity to open source organizations to discover new talent and grow their organization. Named-Data Networking (NDN) is a project that aims to develop a new Internet architecture based on information centric communication. Since its inception in 2010, we have developed open source libraries and software which we deploy and test on our global testbed. To grow our community further and publicize our efforts we will be applying to be an organization in GSoC 2019. We hope to focus this GSoC on NDN applications and application support.

Useful Background Information

Project Ideas

If you would like to propose your own project, you may discuss them on the ndn-interest (for very broad topics) or nfd-dev (for developement related topics) mailing lists. More information on how to join the mailing lists can be found here.

Following are the project ideas we have collected so far. Please feel free to contact the mentors directly via email or on our slack channel.

1. Integrate IPFS lookup with NDN

Possible Mentor(s): Michał Król (m.krol [at] ucl.ac.uk),

Ernest McCracken (emccrckn [at] memphis.edu)

Difficulty: Medium
Tags: NDN, IPFS, DHT
Skills: go, Python, Basics of Distributed Hash Tables(DHT), IPFS and NDN
Description:
InterPlanetary File System (IPFS) is a protocol and network designed to create a content-addressable, peer-to-peer method of storing and sharing hypermedia in a distributed file system. IPFS is a peer-to-peer distributed file system that seeks to connect all computing devices with the same system of files. IPFS could be seen as a single BitTorrent swarm, exchanging objects within one Git repository. In other words, IPFS provides a high-throughput, content-addressed block storage model, with content-addressed hyperlinks.

Currently, IPFS is built as an overlay on top of end-centric IP communication which limits its performance. In contrast, Named Data Networking (NDN) – a proposed future internet architecture, provides native support for data-centric communication in the network layer. The NDN testbed is already operational with multiple nodes across the globe and allows to efficiently share large data volumes in a private and secure way. The goal of the project is to allow IPFS to use NDN as one of their protocols for transferring data.

Deliverables:
Primary:

  • Modify IPFS lookup DHT to support NDN names in addition to IP addresses
  • Develop a simple NDN application registering its names in IPFS DHT
  • Use NDN transport to retrieve files from IPFS

2. High-performance Disk Repository over NDN

Possible Mentor(s): Susmit Shannigrahi (susmit [at] colostate.edu)

Chengyu Fan (chengyu.fan [at] colostate.edu)

Difficulty: Medium
Tags: Storage, Database, Networking
Skills: Databases, Networking, C++, Python
Description:
This project will attempt to create high-performance disk-based storage that will integrate with NDN. The NDN packets will be stored in a high-performance database that will facilitate fast read and write. Finally, the project will implement an NDN-based protocol that will allow the network to use this storage as a secondary cache.

We will reuse a lot of architectural designs (and possibly code) from the previous implementations such as repo-ng. This product will potentially be used in production big-data workflows very shortly. The student is not expected to protocol research, only coding and perform performance benchmarks.

The student will learn about NDN development and high-speed databases. The student will be responsible for the following:
  • Get familiarized with NDN by creating prototypes and studying the code
  • Getting familiar with NDN development tools and process
  • Adding various features to the application
  • Publishing the first version of the application on GitHub
Deliverables:
Primary:

  • Systematically benchmark databases that can support big-data and work with the mentors to decide which database suits best
  • Implement high speed read/write interfaces with the database
  • Interface this database with NDN forwarding pipeline
  • Implement protocols for mirroring network data into the database
  • Deploy the code in an actual testbed, test, and benchmark the implementation

3. NDN Photo Chat (npChat)

Possible Mentor(s): Ashlesh Gawande (agawande [at] memphis.edu)

Jeremy Clark (jrclark2 [at] memphis.edu)

Difficulty: Medium
Tags: Fun/Peripheral
Skills: Android, Java, JNI, Basics of Networking
Description:
This is a photo and file sharing application built on Android and is inspired by Snapchat. The project’s goals are to develop a completely decentralized application that runs over the Named Data Network (NDN), use the PSync protocol, and utilize a Web-Of-Trust like model instead of the traditional NDN hierarchical model. Through this application we would like to demonstrate the benefits of NDN and provide an open source, distributed alternative to Snapchat. Currently we have a basic Android application prototype that was demoed at ACM ICN 2018.
Student will learn about Android and NDN development. The student will be responsible for the following:
  • Get familiarized with NDN by reading research papers and playing around
  • Participate in research discussions for the deliverables
  • Getting familiar with the development tools and process
  • Adding various features to the application
  • Publishing the first version of the app on Google Play Store
Deliverables:
Primary:

  • Implement prefix propagation to announce the app on NDN testbed
  • Implement a way to share list of friends in a decentralized way using PSync
  • Enhance friend functionality to create friends remotely
  • Implement a GPS location feed to gather public content by locality
  • Release app on Google Play Store

Secondary:

  • Access control for the content produced by a user

4. Off-the-grid Email Synchronization Application using NDN (MailSync)

Possible Mentor(s): Ju Pan (pjokk722 [at] email.arizona.edu)
Teng (philoliang [at] email.arizona.edu)
Difficulty: Medium
Tags: Fun/Peripheral
Skills: Java, Android, UI/UX, Database Basics, NDN Basics
Description:
MailSync is an application for synchronizing emails between Android device and laptop. With MailSync running in the background on Android device, if the Internet is not available, emails can be synchronized from Android device to laptop. One use case is when user is on a flight but want to use laptop to work on emails. MailSync is built on top of Named Data Networking (NDN) – a future Internet architecture focusing on named data rather than numerically addressed hosts. MailSync is written in Java to support Android device. The main external libraries used are jNDN and JavaMail. MailSync utilizes Couchbase NoSQL database to store NDN data. At this stage, we have a working prototype that can be seen here. Code base is available here.
Your responsibilities for this project will be:
  • Learning NDN basics following the tutorials we provide
  • Implementing a few key features along with unit tests
  • Improving UI/UX design
Deliverables:
Primary:

  • Data translating module (email data → NDN data) and improved database query implementation
  • Automatic NDN environment configuration using Java code
  • Unit test for each feature and the field test with a large amount of emails
  • Improved UI matching NDN color theme.

Secondary:

  • Implementation of security mechanism supporting user authentication and authorization when synchronizing

5. Decentralized Nestable media aggregation

Possible Mentor(s): Ernest McCracken (emccrckn [at] memphis.edu)
Difficulty: Easy
Tags: Fun/Peripheral
Skills: Javascript, nodeJS, mongoDB, Angular 1.x, Basics of NDN
Description:
Reddit is a web content aggregation site that supports subtopics or “subreddits”.  However, only a single level of subtopics are supported and the site itself is centralized.  With NDN we can support a naming scheme that allows nested subreddits. For example, dreddit/cars would be the cars subreddit but dreddit/cars/used would be the more specific used cars subreddit.  Higher order topics would aggregate popular posts not just within their own topic but also include popular posts from subtopics. Additionally, we want to support decentralization in which subtopics can be hosted independently of each other which fits well in the NDN architecture.  This body of work will be to allow two or more servers hosting the same or nested subreddits to be able to sync their data using Psync.
Expected Outcomes:
  • A single page website that will serve as the web portal for the application and make use of the ndnJS library for communication.  Currently a small subset of reddit like features are already implemented.
  • NDN hub discovery using NDN-FCH(Find closest hub).
  • API documentation between web client and server.
  • A back end nodeJS server running ndnJS and storing data in mongoDB.  The server will need to be able to discover other servers and sync the subreddits in which both servers provide content for.

6. NDN Repo Dynamic Fetching Pattern

Possible Mentor(s): Xinyu Ma (bitmxy [at] gmail.com)

Tianxiang Li (tianxiang [at] cs.ucla.edu)

Difficulty: Medium
Tags: Core development
Skills: C++, JSON, Basics of NDN
Description:
Persistent in-network storage repository (repo for short) has been an important part of the NDN architecture. Repo ensures data availability in the network, and facilitates the peer-to-peer asynchronous communication model. One of the important components of repo is to populate its local storage by fetching data from certain producers. There can be different “patterns” for data fetching depending on application’s specific need (name prefix, fetching period, frequency, etc. ). Different applications may have different data generation patterns, for example, applications such as peer-to-peer file sharing, focus on the exchange of already generated data files. To this end, repo needs to perform an one-time fetching of files that consist of multiple data packets. Other applications may involve continuous generation of data, such as IoT sensors with periodic measurements. As a result, repo needs to continuously fetch measurement data based on data generation frequency. Currently, the fetching pattern of repo is hard-coded, the goal of this project is to provide an interface for applications to specify the fetching pattern of repo, and convey this information to repo through the transmission of Command Interest.
Expected Outcomes:
  • Allowing application to specify repo’s fetching pattern, generate command Interest containing “pattern” information
  • Repo interprets the pattern information contained in the command Interest
  • Enable update of fetching pattern
  • Enable termination of fetching pattern

7. BIRB (Distributed Social Media Application over NDN)

Possible Mentor(s): Saurab Dulal (sdulal [at] memphis.edu)

Ashlesh Gawande (agawande [at] memphis.edu)

Difficulty: Easy
Tags: Fun/Distributed
Skills: Javascript, nodeJS, mongoDB, Basics of NDN, ndn-js
Description:
Security, privacy and access control are the biggest challenges in today’s social media applications. Most of the data shared across these applications are used by some centralized authority (e.g. Facebook, Instagram, Twitter) for generating revenue by targeting specific advertisements, and can go beyond (e.g. Cambridge Analytica Data Scandal). Mostly, centralized data servers storing users data, absence of the user’s role in data privacy, and access control contribute to an insecure social media.

Birb is a distributed “Twitter-like” social media application developed on top of NDN aiming to solve the above-mentioned challenges. The data shared across the Birb network are stored only on the local device of a user eliminating the need of a centralized server, and also ensuring data privacy and access control. It uses NDNs inbuild security to provide end-to-end data security and utilizes In-network caching ability for data distribution – making the content delivery process much faster. Currently, we have developed a basic version of the application  for desktop capable of sharing data between two users using local NFD. The main aim of this project is to develop a prototype application that will use current NDN testbed for remote communication.

The students will learn about the basics of NDN (specifically ndn-js), Node.js, electron-js, and mongo-db and they will be responsible for the following:
  • Learn about the basics of NDN through research papers and code base
  • Developing some simple application using ndn-js for insights.
  • Understanding the deliverables and participating in R&D
  • Enhancing the core features and user interface.
Deliverables:
Primary:

  • POC providing communication between users using local NFD
  • Enhance the application for remote communication using NDN testbed
  • Develop a peer discovery mechanism to detect peers availability – currently we use a centralized server
  • Release the first version of the application (Linux/MacOS)

Secondary:

  • Implement access control and privacy policy on the locally stored data.
  • Implement group creation and communication by using Psync protocol

Student proposal guidelines

Students may contact mentors directly to get feedback on their proposals and if they need any help with gathering more background information about the project. Most publications about NDN are available here and under the Publications header on top right. It is best if the projects are selected from those listed here, but self proposed project are acceptable if student has some previous experience with NDN or ICN (Information Centric Networking) in general.

Project proposals must contain the following information:

  • Name, Affiliation, email, and any other relevant contact information
  • Year/classification of study, Timezone
    • Details of availability during the summer
  • Relevant skills, Relevant courses and work
    • You can share your GitHub profile etc.
  • A short summary of how you plan to work on the proposal, including any background work/research you have done so far. This should also include why you would like to work on this project.
  • A rough timeline of the proposed work based around GSoC’s phases.