diff --git a/cryptography/hazmat/backends/__init__.py b/cryptography/hazmat/backends/__init__.py
index 663d1f5..b0f663f 100644
--- a/cryptography/hazmat/backends/__init__.py
+++ b/cryptography/hazmat/backends/__init__.py
@@ -25,23 +25,12 @@
     global _available_backends_list
 
     if _available_backends_list is None:
-        _available_backends_list = []
-
-        for backend in pkg_resources.iter_entry_points(
-            "cryptography.hazmat.backends"
-        ):
-            is_backend_available = pkg_resources.get_entry_info(
-                backend.dist,
-                "cryptography.hazmat.is_backend_available",
-                backend.name
+        _available_backends_list = [
+            backend.load(require=False)
+            for backend in pkg_resources.iter_entry_points(
+                "cryptography.backends"
             )
-
-            if is_backend_available is not None:
-                is_backend_available = is_backend_available.load(require=False)
-                if not is_backend_available():
-                    continue
-
-            _available_backends_list.append(backend.load(require=False))
+        ]
 
     return _available_backends_list
 
diff --git a/cryptography/hazmat/bindings/commoncrypto/binding.py b/cryptography/hazmat/bindings/commoncrypto/binding.py
index ee7378a..ee09beb 100644
--- a/cryptography/hazmat/bindings/commoncrypto/binding.py
+++ b/cryptography/hazmat/bindings/commoncrypto/binding.py
@@ -13,9 +13,6 @@
 
 from __future__ import absolute_import, division, print_function
 
-import platform
-import sys
-
 from cryptography.hazmat.bindings.utils import build_ffi
 
 
@@ -53,8 +50,3 @@
             modules=cls._modules,
             extra_link_args=["-framework", "Security"]
         )
-
-    @classmethod
-    def is_available(cls):
-        return sys.platform == "darwin" and list(map(
-            int, platform.mac_ver()[0].split("."))) >= [10, 8, 0]
diff --git a/cryptography/hazmat/bindings/openssl/binding.py b/cryptography/hazmat/bindings/openssl/binding.py
index 4cbe3c5..37891f6 100644
--- a/cryptography/hazmat/bindings/openssl/binding.py
+++ b/cryptography/hazmat/bindings/openssl/binding.py
@@ -116,12 +116,6 @@
         assert res != 0
 
     @classmethod
-    def is_available(cls):
-        # For now, OpenSSL is considered our "default" binding, so we treat it
-        # as always available.
-        return True
-
-    @classmethod
     def init_static_locks(cls):
         with cls._lock_init_lock:
             cls._ensure_ffi_initialized()
diff --git a/setup.py b/setup.py
index 30146b7..6a7642f 100644
--- a/setup.py
+++ b/setup.py
@@ -14,6 +14,7 @@
 from __future__ import absolute_import, division, print_function
 
 import os
+import platform
 import subprocess
 import sys
 from distutils.command.build import build
@@ -57,6 +58,21 @@
     test_requirements.append(VECTORS_DEPENDENCY)
 
 
+def cc_is_available():
+    return sys.platform == "darwin" and list(map(
+        int, platform.mac_ver()[0].split("."))) >= [10, 8, 0]
+
+
+backends = [
+    "openssl = cryptography.hazmat.backends.openssl:backend"
+]
+
+if cc_is_available():
+    backends.append(
+        "commoncrypto = cryptography.hazmat.backends.commoncrypto:backend",
+    )
+
+
 def get_ext_modules():
     from cryptography.hazmat.bindings.commoncrypto.binding import (
         Binding as CommonCryptoBinding
@@ -71,7 +87,7 @@
         constant_time._ffi.verifier.get_extension(),
         padding._ffi.verifier.get_extension()
     ]
-    if CommonCryptoBinding.is_available():
+    if cc_is_available():
         ext_modules.append(CommonCryptoBinding().ffi.verifier.get_extension())
     return ext_modules
 
@@ -178,14 +194,6 @@
     },
 
     entry_points={
-        "cryptography.hazmat.backends": [
-            "commoncrypto = cryptography.hazmat.backends.commoncrypto:backend",
-            "openssl = cryptography.hazmat.backends.openssl:backend"
-        ],
-
-        "cryptography.hazmat.is_backend_available": [
-            "commoncrypto = cryptography.hazmat.bindings.commoncrypto."
-            "binding:Binding.is_available"
-        ]
+        "cryptography.backends": backends,
     }
 )
