diff --git a/src/com/google/enterprise/adaptor/fs/FsAdaptor.java b/src/com/google/enterprise/adaptor/fs/FsAdaptor.java
index 60343f9..f00d3a9 100644
--- a/src/com/google/enterprise/adaptor/fs/FsAdaptor.java
+++ b/src/com/google/enterprise/adaptor/fs/FsAdaptor.java
@@ -179,12 +179,15 @@
   private FileTimeFilter lastAccessTimeFilter;
 
   public FsAdaptor() {
-    // At the moment, we only support Windows.
-    if (System.getProperty("os.name").startsWith("Windows")) {
+    String osName = System.getProperty("os.name");
+    if (osName.startsWith("Windows")) {
       delegate = new WindowsFileDelegate();
+    } else if (osName.startsWith("Linux")) {
+      delegate = new LinuxFileDelegate();
     } else {
       throw new IllegalStateException(
-          "Windows is the only supported platform.");
+          "This is a non-supported platform. The Connector for File Systems"
+          + " only supports the Windows and Linux platforms.");
     }
   }
 
@@ -259,7 +262,11 @@
             " is not a supported DFS path. Only DFS links of the format " +
             "\\\\host\\namespace\\link are supported.");
       }
-    } else {
+    // TODO: Skip the "is root" check on Linux for now. We need to determine
+    // an approach at verifying that the src path is the mount point of the
+    // UNC path and that the UNC path is a root UNC (i.e. of the form
+    // \\host\share).
+    } else if (System.getProperty("os.name").startsWith("Windows")) {
       if (!rootPath.equals(rootPath.getRoot())) {
         // We currently only support a config path that is a root.
         // Non-root paths will fail to produce Acls for all the folders up
diff --git a/src/com/google/enterprise/adaptor/fs/LinuxFileDelegate.java b/src/com/google/enterprise/adaptor/fs/LinuxFileDelegate.java
new file mode 100644
index 0000000..b889c1d
--- /dev/null
+++ b/src/com/google/enterprise/adaptor/fs/LinuxFileDelegate.java
@@ -0,0 +1,75 @@
+// Copyright 2014 Google Inc. All Rights Reserved.
+//
+// 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.
+
+package com.google.enterprise.adaptor.fs;
+
+import com.google.enterprise.adaptor.AsyncDocIdPusher;
+import com.google.enterprise.adaptor.DocId;
+
+import java.io.IOException;
+import java.nio.file.attribute.AclEntry;
+import java.nio.file.attribute.AclFileAttributeView;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.Collections;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+class LinuxFileDelegate extends NioFileDelegate {
+  private static final Logger log
+      = Logger.getLogger(LinuxFileDelegate.class.getName());
+
+  @Override
+  public AclFileAttributeViews getAclViews(Path doc) throws IOException {
+    // TODO(mifern): Add Acl support.
+    return new AclFileAttributeViews(
+        new SimpleAclFileAttributeView(Collections.<AclEntry>emptyList()),
+        new SimpleAclFileAttributeView(Collections.<AclEntry>emptyList()));
+  }
+
+  @Override
+  public AclFileAttributeView getShareAclView(Path doc) throws IOException {
+    // TODO(mifern): Add share Acl support.
+    return new SimpleAclFileAttributeView(Collections.<AclEntry>emptyList());
+  }
+
+  @Override
+  public AclFileAttributeView getDfsShareAclView(Path doc) {
+    // TODO(mifern): Add DFS support.
+    return new SimpleAclFileAttributeView(Collections.<AclEntry>emptyList());
+  }
+
+  @Override
+  public Path getDfsUncActiveStorageUnc(Path doc) throws IOException {
+    // TODO(mifern): Add DFS support.
+    return null;
+  }
+
+  @Override
+  public void startMonitorPath(Path watchPath, AsyncDocIdPusher pusher)
+      throws IOException {
+    // TODO(mifern): Start monitoring.
+  }
+
+  @Override
+  public void stopMonitorPath() {
+    // TODO(mifern): Not sure what monitoring we will have but we need
+    //  to stop it.
+  }
+
+  @Override
+  public void destroy() {
+    // TODO(mifern): Destroy any resrouces created for monitoring.
+  }
+}
