게임 개발을위한 버전 관리-문제 및 솔루션? [닫은]


106

Subversion , GitMercurial 과 같은 오픈 소스 시스템과 Perforce 와 같은 상용 시스템을 포함 하여 많은 버전 제어 시스템을 사용할 수 있습니다 .

게임 개발 프로세스를 얼마나 잘 지원합니까? 비 텍스트 파일 (바이너리 파일), 대규모 프로젝트 등과 관련하여 VCS를 사용하는 문제는 무엇입니까? 이러한 문제에 대한 해결책은 무엇입니까?

답변 구성을 위해 패키지별로 시도해 봅시다. 각 패키지 / 답변을 결과로 업데이트하십시오.

또한 VCS가 무료인지 상업용인지, 분산 형인지 중앙 형인지 등의 답변에 간단한 세부 정보를 나열하십시오.

업데이트 : 아래 VCS 중 두 가지를 비교 한 훌륭한 기사를 찾았습니다. Git은 MacGyver이고 Mercurial은 Bond 입니다. 글쎄, 나는 그것이 정착되어 기쁘다 ... 그리고 저자는 끝에 좋은 인용문을 가지고있다 :

분산 VCS로 아직 전환하지 않은 사람들에게 전도하는 것은 괜찮지 만, Git 사용자를 Mercurial로 (또는 그 반대로) 변환하는 것은 모든 시간과 에너지를 낭비하는 것입니다.

특히 Git과 Mercurial의 실제 적이 Subversion 이기 때문에 . Dang, 그것은 FOSS-land에 있는 코드-에이트-코드 세계입니다.


참고 – 이것은 질문 gamedev.stackexchange.com/questions/245/…대체 하기위한 것 입니다. 72 시간 안에 나는 그 질문을 삭제하려고합니다. 나는 사람들 이이 질문에 대한 답변 / 의견을 복사 할 시간을주기 위해 지금 떠납니다 . :)
Cyclops

사람들이 편집 지침을 따르면 이것은 아마도 내가 가장 좋아하는 질문 중 하나 일 것입니다. 이를위한 게임 개발자 전용 솔루션 개발 : D
Jesse Dorsey

@Noctrine, 당신은 그렇지 않으면 면책 조항을 추가 해야합니까? 의 : 물론 사람들이 지시를 따를 것이다 ...
외눈 박이 거인

다른 질문을 삭제하지 마십시오. 그것이 주제와 관련이 없다면 (그것이 아니라고 생각합니다) 닫히고 보관 할 수 있습니다. 이 복제본으로 닫을 수도 있습니다.
Firas Assaad

@Firas, 그것은 폐쇄 - 다시는 오픈 :)에 관계없이, 나는이 제제는 더 좋은 생각 (그리고 예, 그것은 위키의) - 사람들이 자신의 답변을 복사하는 경우,이 하나가 되어야 다른 문제의 모든 정보를 다룹니다.
Cyclops

답변:


71

힘내

최근에 나는 Git bandwagon (SVN과 Mercurial을 사용했다)에 있었다. 지금까지 나는 Git으로 얻는 것을 정말 좋아한다. 설치 과정이 쉽지 않으며 더 많은 개발 도구가이를 채택하기 시작했습니다.

분산 버전 제어 시스템입니다. 이것은 우리가 우리 자신의 트렁크 같은 지역을 가질 수 있습니다. 내 영역에서 작업하고 변경 집합을 매우 쉽게 보도록 초대 할 수 있습니다. 중앙 저장소를 정리하지 않고도 내 공간에서 롤백 할 수 있습니다. SVN을 사용하여 로컬로 수행 할 수있는 모든 것을 커밋하고 분기하고 수행 할 수 있습니다. 이 컨트롤을 정말 좋아합니다.

SVN을 사용하면 커밋하려면 리포지토리에 액세스해야합니다. 이동 중이거나 인터넷이없는 카페에 있다면 어떻게해야합니까? 안좋다.

물론 SVN은 배우기가 훨씬 간단하지만 분산 소스 제어의 장점은 학습 곡선이 거의 없다는 사실보다 훨씬 크다고 생각합니다.

또한 병합하는 것이 더 똑똑하다는 것을 좋아합니다.

GIT의 주요 단점은 전체 기록을 로컬로 저장한다는 것입니다. (예, 수술을 수행하여 줄일 수 있지만 기본 동작입니다). 소스 파일에는 전혀 문제가되지 않지만 기가 바이트의 자산 데이터가 포함 된 대규모 프로젝트가있는 경우 문제가됩니다. 현재 경험상 소규모 또는 소스 전용 저장소에 대해서만 GIT를 권장합니다.

여전히 GIT가 궁금하다면 http://thkoch2001.github.io/whygitisbetter/ 에서 유용한 정보 / 메트릭을 확인하십시오. 또한 참조 확인 https://git.wiki.kernel.org/index.php/GitSvnComparsion을


1
QA가 변경 사항을 메인 라인으로 변경하기 전에 테스트하거나 데모를 쉽게 생성 및 검증 할 수 있도록하는 브랜치 계층 구조에 대한 아이디어가 마음에 듭니다.
tenpn

@tenpn, 그것은 일반적으로 분산 VCS의 기능입니까, 아니면 그냥 Git입니까?
Cyclops

1
Git과 Mercurial은 매우 큰 파일을 넣을 때 어려움을 겪는 것으로 들었습니다. 나보다 더 많은 경험을 가진 사람들의 소문에 대한 진실이 있습니까?
drhayes

6
Git은 훌륭하지만 100MB가 넘는 큰 그래픽 또는 음악 자산을 처리 할 때는 커밋 및 체크 아웃시 눈에 띄게 느려집니다. 현재 Git의 경쟁자 인 Mercurial은이 특정 문제를 해결하는 "큰 파일"확장자를 가지고 있습니다. 자산이 많지 않은 게임 프로젝트가 있다면 Git을 사용해 볼 수 있습니다.
Spoike

3
바이너리 파일을 관리하기 위해 Git의 서브 모듈을 사용하지 않는 이유는 무엇입니까? 이렇게하면 필요에 따라 별도의 리포지토리를 만든 다음 하위 모듈을 사용하여 서로 연결할 수 있습니다. 기본 리포지토리의 향후 변경 사항은 하위 모듈에 영향을 미치지 않아야합니다.
Alex Schearer

62

수은제

주요 특징들:

  • 분산 VCS
  • 무료 오픈 소스
  • 플러그인 스크립트는 작성하기 쉽습니다 --- 파이썬이나 쉘 스크립트로 작성 될 수 있습니다
  • 이미 무료로 제공되는 많은 플러그인 스크립트가 있습니다
  • 이 책을 포함하여 많은 문서를 이용할 수 있습니다 (권장)

텍스트가 아닌 파일의 사용과 관련하여 Mercurial의 최신 버전 (> = 2.0)은 기본적으로 큰 파일 확장자 제공합니다 .

largefiles는 Mercurial 위에 중앙 집중식 클라이언트-서버 계층을 추가하여이 문제를 해결합니다. 큰 파일은 네트워크 어딘가의 중앙 저장소에 있으며 필요할 때 필요한 파일 만 가져옵니다.

bigfiles 확장 과 같은 유사한 솔루션을 제공하는 다른 확장이있어 동일한 Mercurial 저장소에 자산을 저장할 수 있지만 필요한 바이너리 만 가져올 수 있습니다.

큰 이진 파일을 갖는 것과 관련된 것 이외의 큰 프로젝트와 관련된 문제는 알지 못합니다. Python 프로젝트는 대규모 프로젝트이며 Mercurial을 사용합니다 .

Joel Spolsky는 Subversion Re-education 에서 Mercurial 사용에 대한 미니 튜토리얼을 작성했습니다.


4
Bigfiles Extension에 대한 흥미로운 참고 사항-원래 스레드에서보고 된 문제 중 하나를 해결하는 Distributed VCS는 많은 이진 파일 자산이있는 게임 제작에는 적합하지 않습니다.
Cyclops

1
Mercurial의 경우 +1 빠르고 사용하기 쉽고 놀랍도록 강력합니다. :) 나는 웹 개발, 게임 개발, 개인 1 인 프로젝트 및 팀 프로젝트에 모든 것을 사용하고 있습니다. BigFiles 확장 프로그램을 소개해 주셔서 감사합니다!
jacmoe

대규모 프로젝트와 관련하여-TortoiseHg는 수정본이 20 개 미만인 소규모 저장소보다 8 년 수정본이있는 대형 저장소에서 훨씬 느리게 나타납니다. 나는 이것이 이것이 거북이 또는 머큐리얼에 더 일반적인지 아닌지 아직 모른다.
Kylotan

4
에 필적하는 옵션이없는 것 같습니다. 누가 로컬 에서 어떤 파일을 작업하고 있는지svn:needs-lock 알 수있는 방법이 없기 때문에 문자 그대로 팀 주변에 그릇을 전달할 수 있습니다. 책상 위의 그릇). BigFiles 확장자인지 여부에 관계없이이 VCS는 이에 대한 실질적인 해결책이없는 이진 파일에는 쓸모가 없습니다.
Sam Harwell

3
큰 파일 지원에 관계없이 두 사람이 Maya 파일을 한 번에 편집하면 한 사람은 체크인하고 다른 사람은 작업을 다시 수행해야합니다. Perforce를 사용하면 최소한 다른 사람이 파일을 편집하고 있음을 알 수 있습니다 (또한 해당 파일을 자동으로 잠급니다).
dash-tom-bang

39

억지로

Perforce (상업 / 폐쇄 소스, 중앙 집중식)는 여러 가지 이유로 업계 표준입니다.

  1. 상용 제품이므로 상용 지원이 제공됩니다. 오픈 소스 프로젝트는 기술 지원을 제외한 무료 라이센스를받을 수 있습니다.
  2. 작업 공간을 매우 잘 지원 하므로 매우 유연한 소스 및 자산 디렉토리 레이아웃이 가능합니다.
  3. 변경 목록을 매우 잘 지원합니다 .
  4. 누가 무엇을하고 있는지 볼 수 있습니다. 게임은 다른 개발 프로젝트에 비해 비정상적으로 많은 수의 빠르게 변화하는 이진 파일 (자산)이 ​​있습니다. 대부분의 경우 병합 할 수 없으므로 누가 언제 / 어디서 / 중요한지를 가진 사람을 추적합니다. Subversion 및 DSCC 클라이언트는 의도적으로이 기술을 사용하지 않지만 특정 응용 프로그램에서는 매우 유용합니다.
  5. 거대한 코드 / 자산 기반을 지원합니다 . 클라이언트 시스템에 중복 데이터를 저장 하지 않습니다 . 이는 트리의 하위 뷰가 수십 기가 인 경우 중요합니다.

그러나 Perforce가 업계에서 자신의 위치가 위협 받고 있다고 느끼지 않는다는 것은 거의 매일 고통 스럽습니다. P4V 및 P4SCC (Visual Studio와 통합)를 포함한 시각적 도구는 느리고 버그가 많으며 후자는 Visual Studio를 완전히 즐기기 위해 고정하는 것으로 알려져 있습니다. AnkhSVN은 Perforce보다 훨씬 앞서 있습니다.

xan의 코멘트 : 그러나 그들의 병합 도구 인 P4Merge (확산 및 병합에 사용)가 우수하고 Tortoise Merge보다 훨씬 우수하다는 점은 주목할 가치가 있습니다. 놀랍게도이 구성 요소는 P4 Visual Tools 패키지의 일부로 무료로 제공됩니다.

slicedlime의 코멘트 : Perforce의 또 다른 단점은 특히 나무가 큰 경우 분기가 큰 고통을 겪는다는 것입니다. 거의 모든 다른 vc는 분기 및 병합에 더 좋습니다. 이것은 일반적으로 위의 장점을 지불하는 작은 가격입니다.

roe의 코멘트 : Perforce는 매우 수다 스럽습니다. 서버가 관여하지 않으면 많은 일이 일어나지 않습니다. 특히, 편집을 위해 개방하려면 서버가 필요합니다. 즉, 서버와의 연결을 끊으려면 몇 번의 후프를 뛰어 넘어야합니다.

jrista의 코멘트 : Perforce를 매일 2 년 이상 사용하고 있으며 100 명 이상의 개발 및 품질 엔지니어링 팀과 함께 친숙해졌습니다. 괜찮은 소스 제어 시스템이지만 SCC 시스템을 평가하는 사람들이 알아야 할 단점이 있습니다.

  • 다른 사람들이 언급했듯이, 분기 / 통합은 특히 번거롭고 수행하기가 어렵습니다. 당신은 불경건 한 양의 통제력을 가지고 있지만, 과도한 복잡성을 초래합니다. 반대로, 시각적 병합 도구는 일종의 일종이며, 작업에 대한 아름다운 3 가지 파일 "기반"병합보기를 제공합니다. Perforce는 분기 경로의 일부 그래픽 시각화 (개정 그래프라고 함)를 제공하지만 시각화 방식으로 인해 도구가 다소 쓸모 없게됩니다. 하나 또는 매우 적은 파일에 대해 아주 작은 시간 세그먼트 만보아야하는 경우 유용 할 수 있습니다.
  • Perforce는 또한 거의 모든 파일 작업에서 파일 및 데이터 복제가 필요하므로 분기, 레이블 지정, 변경 목록 등이 매우 효율적이지 않습니다. 여기에는 스파 스나 가벼운 태그 또는 분기가 없습니다. 변경 사항을 추적하기 위해 엄청난 양의 디스크 공간을 사용하는 것을 두려워하지 않는다면 perforce가 당신에게 잘 도움이 될 것입니다. 그렇지 않다면 다른 도구를 찾아 볼 것입니다.
  • Perforce는 작업 공간을 사용하지만, 디스크의 실제 파일을 사용하여 일부 상태를 확인하는 대신 Perforce가 작업 공간의 모든 상태를 캐시하므로 시간이 지체 될 수 있습니다. 어떤 이유로 든 디스크의 실제 파일이 실제로 최신 상태가 아닌 경우 작업 공간에 파일이 최신 상태이므로 파일이 동기화되지 않는 경우가 종종 있습니다.
  • 마지막 성가신 Perforce는 네트워크에서 다소 잔인합니다. 매우 수다스러운 프로그램이며 상당한 양의 대역폭을 소비합니다. 네트워크 연결이 끊어지면 연결이 복원 될 때까지 소스 제어 파일로 작업 할 수없는 위험이 높습니다. 현재로서는 Perforce에서 오프라인으로 수행 할 수있는 활동을 발견하지 못했습니다.

2
Perforce의 또 다른 장점은 소규모 취미 프로젝트에 적합하거나 대규모 프로젝트에 대한 적합성을 평가하는 처음 두 명의 사용자에게는 무료라는 점입니다.

내 경험에서 당신의 대답에서 5 점은 매우 사실입니다. 확장 성이 매우 뛰어납니다. 오류는 드물고 지원이 빠릅니다. 비용에 대해서는 확실하지 않지만 Yacine은 처음 두 명의 사용자에게는 무료라고 말합니다. 작은 게임을 가진 소규모 스튜디오의 경우 다른 옵션을 평가 해 볼 가치가 있습니다. Visual Studio 통합은 기본적으로 제공되지 않습니다. 그러나 스튜디오에서 완벽한 Perforce 애호가가 VS에 대한 훌륭한 소스 공급자를 처음부터 작성하도록 충분히 운이 좋았습니다.
paulecoyote

여유가 있다면 퍼 포스는 굉장합니다. 나는 모든 버전 제어 시스템을 사용하지는 않았지만 10 년의 상업용 게임 개발 및 여러 버전 제어 시스템에서 필자가 사용했던 최고 수준입니다. 대용량 데이터 파일을 빠르고 안정적으로 처리하며, 올바르게 설정하면 비교적 느린 인터넷 연결을 통해 다중 사이트 설정에서 잘 작동합니다. Visual Studio 통합은 완벽하지는 않지만 매우 견고합니다.
bluescrn

1
(대규모) 게임 개발을 위해 하나의 VCS 를 선택 해야한다면 Perforce가 될 것입니다. 여러 개를 선택할 있으면 텍스트 자산 (코드, 스크립트 및 기타 기타 데이터 파일)에 DVCS를 추가하지만 이진 자산에 대해서는 Perforce를 유지합니다.
dash-tom-bang

2
나는 Perforce를 사용하는 대규모 게임 프로젝트에서 일했고 누군가가 그것을 지불 할 것이라고 완전히 당황했습니다. LAN에서도 서버와 동기화 할 필요가 없습니다. "오프라인 작업 조정"기능을 이해하지만 실제로 워크 플로가 너무 방해가되어 네트워크 문제가 발생하면 작동하지 않습니다. P4 플러그인이있는 IDE를 사용하지 않거나 명령 줄이나 다른 도구에서 파일을 편집하려는 경우 P4 클라이언트로 돌아가서 약간의 부기를 유지해야합니다. 다른 VCS는 작업을 수행하는 데 너무 많은 장벽을 두지 않습니다.
Suboptimus

27

파괴

  • 중앙 집중식 오픈 소스

  • 블렌더 파일-.blend 파일이 이진 파일인지 확실하지 않지만 Subversion에 파일을 추가하는 데 아무런 문제가 없었습니다. 몇 가지 실험을 수행 한 후 변경된 파일의 파일 크기 증가는 공칭으로 표시되므로 단순히 전체 파일로 복사하는 것이 아닙니다.

  • 대규모 프로젝트-별다른 효과가 없지만 작동합니다. 확실히의 최소 5.5 GB의 저장소를 처리 할 (서버 저장소 디렉토리의 전체 크기, 주로 이진 자산).

  • 클라이언트의 중복 데이터-Subversion은 사용자 작업 공간에있는 모든 파일의 사본을 깨끗한 사본으로 유지합니다. 이것의 장점은 서버로 돌아 가지 않고 diff를 수행하거나 되돌릴 수 있다는 것입니다. 단점은 10 기가 바이트의 작업 파일에 20 기가 바이트의 디스크 공간이 필요하다는 것입니다.

  • 무시 목록은 디렉토리의 속성입니다 (gui로 간단하고 명령 줄을 귀찮게합니다).

  • Subversion을 사용하면 파일 / 자산을 잠글 수 있습니다. 이는 여러 아티스트와 디자이너가 동일한 파일을 작업 할 때 매우 유용합니다.

  • 외부는 프로젝트 간 공유 (예 : 라이브러리 또는 기본) 코드를 처리하는 좋은 방법입니다.


대규모 프로젝트-KDE, GNOME.
Matias Valdenegro

* FSFS는 복구하기에 매우 취약하므로 백업시주의를 기울여야합니다. * 이해하기 쉬운 TortoiseSvn은 훌륭한 고객입니다. * 오픈 소스 버그 추적기, 지속적인 통합 시스템 등은 종종 Subversion을 "바로"지원합니다. * Subversion 사용에 관한 좋은 책이 있습니다.
paulecoyote

1
@ paulecoyote, 이것은 위키 게시물이며, 의견이 아닌 새로운 정보로 자유롭게 편집하십시오.
Cyclops

1
SVN은 Tortoise SVN ( tortoisesvn.net ) 과 함께 사용 하면 좋으며 상황에 맞는 메뉴에 잘 통합되어 모든 작업에 GUI를 제공하는 클라이언트입니다. 불행히도, 거북이에는 Linux / Mac OS 포트가 없습니다 (적어도 이것을 작성하십시오). 팁 : 여러 사람과 함께 작업하는 경우 커밋하기 전에 항상 업데이트 (및 충돌 병합 / 해결)하십시오.
Exilyth

7

AlienBrain

에서 아비드 :

Alienbrain은 엔터테인먼트 산업의 아티스트를위한 디지털 자산 관리 시스템입니다

  • 상업용 (Perforce보다 비싸다), 중앙 집중식
  • Photoshop, Maya, 3ds Max, Microsoft Visual Studio 등과 같은 다른 전문 2D 및 3D 워크 플로우 도구와 통합되도록 설계되었습니다.

나는 AlienBrain에 대한 경험 이 없으며 Mike McShaffry의 Game Coding Complete 책에서만 들었습니다 . 그러나 그는 그것을 높게 생각하는 것 같습니다.

Photoshop 및 3D Studio Max와 같은 독창적 인 응용 프로그램이 아닌 Visual Studio와 주로 통합되도록 설계된 다른 제품과 달리 아티스트 및 기타 기고자는 실제로이 제품을 사용합니다. 다른 제품의 큰 단점 중 하나는 텍스트가 아닌 파일을 순진하게 처리한다는 것입니다. AlienBrain은이 파일들을 염두에두고 작성되었습니다.

물론 그는 또한 다음과 같이 설명합니다.

정말 심각한 자산 추적 문제와 똑같이 심각한 예산 을 가진 사람들을 위해 ...


예! 결국 그것을 얻는 사람 : 자산과 코드에는 다른 도구가 필요합니다! +1
jacmoe

3
AlienBrain에 대한 나의 경험은 저자가 게임 개발을하지 못한다는 것입니다. 강력한 소스 제어 솔루션이 아닙니다. 일부 기능은 팀의 일부에게는 좋지만 가장 멋진 광고 기능 중 일부는 유용 할 수있는 방식으로 구현되지 않습니다 (예 : 스테이징 인터페이스, 누군가가 자산을 "검토하기 위해"확인할 수있는 스테이징 인터페이스). 검토 대상과 그렇지 않은 대상을 알 수있는 방법이 없으며 동기화 할 때 어쨌든 얻을 수 있습니다. 또한 캐시하지 않으므로 동기화 할 때마다 모든 단일 파일을 테스트해야합니다. 많은 자산이 있으면 느립니다. :)
dash-tom-bang

AlienBrain의 유일한 유용한 점은 Max 파일과 작동하는 미리보기 창입니다. 다른 모든 것은 완전히 쓰레기입니다.
tenpn

1
직접 경험이 아니기 때문에 이것이 얼마나 건설적인지 잘 모르겠지만, 프로젝트를 진행하기 전에 AlienBrain을 사용하고 더 이상 사용하지 않은 몇 가지 프로젝트를 수행했으며 아무도 좋은 말을 할 수 없었습니다. 그것. 그것에 대해 읽고 입소문을 잡는 것에 대한 나의 기억은 장면에서 터져서 정말 시원하게 들리고 그것을 감당할 수있는 일부 사람들이 그것을 시도하고 결국 실수임을 깨달았습니다.
Suboptimus

3

팀 파운데이션 서버

에서 마이크로 소프트

  • 상업용
  • 중앙 집중식
  • Visual Studio와 매우 잘 통합
  • VS 이외의 사용자 (예 : 아티스트)를위한 Windows 탐색기 통합
  • git의 'stashing'과 다소 비슷한 "Shelved"변경 세트를 지원하지만 서버로 올라갑니다. 이 서가 세트를 공개하여 다른 사용자가 귀하를 대신하여 통합 할 수 있도록 할 수도 있습니다.
  • 2012 년부터 Visual Studio에 직접 구축 된 매우 우수한 코드 검토 워크 플로가 있습니다.
  • 병합 도구의 최신 버전이 매우 좋습니다. 자동 병합은 꽤 잘 작동합니다.
  • 크고 구속적인 파일을 잘 지원합니다 (확실히 병합 할 수 없습니다)
  • 아주 좋은 빌드 서버
  • 리포지토리에 커밋되기 전에 자동화 된 빌드, 단위 테스트, 코드 분석을 통해 선반 세트의 품질을 평가할 수있는 게이트 된 체크인을 지원합니다.
  • 매우 우수한 프로젝트 관리 도구 (엄격한 소스 제어 기능은 아니지만 실제로 유용)는 높은 수준의 요구 사항에서 코드까지 추적 성을 제공합니다.

MILSPEC 시뮬레이터 프로젝트에서 TFS를 광범위하게 사용했으며 꽤 좋습니다. 요즘에는 일식 플러그인이 있지만 Mac을 사용하는 경우 아마도 가장 크지 않을 것입니다. 클라우드 호스팅 버전은 소스 제어 백엔드에 대한 git 저장소를 지원합니다.

클라우드에서 호스팅되는 Visual Studio Online 에서 최대 5 명의 사용자가 무료로 사용할 수 있습니다 (닫힌 소스 허용, 리포지토리 크기 제한 없음). 로컬로 호스팅하려면 비용이 많이들 수 있습니다.

내가 가장 좋아하는 것은 소프트웨어 엔지니어링 관리 기능이며, 큰 파일과 이진 파일을 매우 행복하게 처리한다는 사실입니다.


1
새로운 Visual Studio Online은 최대 5 명의 사용자에게 무료로 제공되며 클라우드 (호스트 백업 등)에서 호스팅됩니다. TFS 또는 Git과 함께 사용할 수 있습니다. 인디 게임 개발에 좋습니다.
Robert Fraser
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.