diff --git a/src/attr/__init__.py b/src/attr/__init__.py
--- a/src/attr/__init__.py
+++ b/src/attr/__init__.py
@@ -9,6 +9,7 @@
 
 from . import converters, exceptions, filters, setters, validators
 from ._cmp import cmp_using
+from ._compat import Protocol
 from ._config import get_run_validators, set_run_validators
 from ._funcs import asdict, assoc, astuple, evolve, has, resolve_types
 from ._make import (
@@ -31,7 +32,7 @@
 dataclass = partial(attrs, auto_attribs=True)  # happy Easter ;)
 
 
-class AttrsInstance:
+class AttrsInstance(Protocol):
     pass
 
 
diff --git a/src/attr/_compat.py b/src/attr/_compat.py
--- a/src/attr/_compat.py
+++ b/src/attr/_compat.py
@@ -18,6 +18,15 @@
 PY_3_12_PLUS = sys.version_info[:2] >= (3, 12)
 
 
+if sys.version_info < (3, 8):
+    try:
+        from typing_extensions import Protocol
+    except ImportError:  # pragma: no cover
+        Protocol = object
+else:
+    from typing import Protocol  # noqa: F401
+
+
 def just_warn(*args, **kw):
     warnings.warn(
         "Running interpreter doesn't sufficiently support code object "

diff --git a/tests/test_compat.py b/tests/test_compat.py
--- a/tests/test_compat.py
+++ b/tests/test_compat.py
@@ -4,6 +4,8 @@
 
 import pytest
 
+import attr
+
 
 @pytest.fixture(name="mp")
 def _mp():
@@ -50,3 +52,13 @@ def test_immutable(self, mp):
 
         with pytest.raises(AttributeError, match="no attribute 'setdefault'"):
             mp.setdefault("x")
+
+
+def test_attrsinstance_subclass_protocol():
+    """
+    It's possible to subclass AttrsInstance and Protocol at once.
+    """
+
+    class Foo(attr.AttrsInstance, attr._compat.Protocol):
+        def attribute(self) -> int:
+            ...

AttrsInstance is only a Protocol in mypy
`__init__.pyi` defines AttrsInstance as follows:
```
class AttrsInstance(AttrsInstance_, Protocol):
    pass
```

So the following typechecks correctly:
```
import attr
from typing import Protocol

class Foo(attr.AttrsInstance, Protocol):
    def attribute(self) -> int:
        ...


def bar(foo: Foo) -> int:
    return foo.attribute()

@attr.define
class CFoo:
    a: int

    def attribute(self) -> int:
        return self.a

bar(CFoo(15))
```

But if you run it you get:

`TypeError: Protocols can only inherit from other protocols, got <class 'attr.AttrsInstance'>`

Because in `__init__.py` it's defined as:
```
class AttrsInstance:
    pass
```

instead of 
```
class AttrsInstance(Protocol):
    pass
```

Ah. Looks like a workaround is to do:

```
class Foo(Protocol):
    __attrs_attrs__: ClassVar[Any]
   def attribute(self) -> int:
        ...
```
Is this anything we can fix in attrs?
I think just the small change I said, I can make a PR. But probably not until next week.

It should just be:
```
from typing import Protocol

class AttrsInstance(Protocol):
    pass
```
